Announcement

Collapse
No announcement yet.

Zugriff auf aufrufendes Element

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zugriff auf aufrufendes Element

    Hallo,

    Ich teste gerade ein bisschen rum, um meine JS-Libraries etwas aufzufrischen.
    Am besten zeige ich mal kurz an einem Beispiel, was ich aktuell bezogen auf meine Frage habe:
    Code:
    foo = (e) => { /* ... */ return some_element; };
    bar = (e) => { /* do something with e */ };
    Wie man sieht, habe ich eine Funktion, die ein Element zurückgibt.
    Auf dieses Element möchte ich in der zweiten Funktion zugreifen.

    Der einfache Weg wäre per Parameterübergabe, bspw.:
    Code:
    bar( foo(param) );
    Schöner würde ich es allerdings finden, wenn ich es über MethodChaining lösen könnte:
    Code:
    foo( param ).bar();
    In bar benötige ich dann allerdings den zugriff auf die Rückgabe von foo().
    Gibt es da einen relativ geschmeidigen Weg, ohne ein komplettes Klassengerüst als Bibliothek zu verfremden?

    Danke
    PHP rocks!
    Eine Initiative der PHP Community

  • #2
    Das funktioniert natürlich, nicht weil Du versuchst auf dem Rückgabewert der ersten Funktion die Funktion bla aufzurufen.

    Promises wären eine Möglichkeit so etwas zu bauen. Das kannst Du einfach mal googlen. Die sind aber eigentlich für einen leicht anderen Zweck gedacht (Asynchronität abbilden ohne tausen verschachtelte Funktionen zu haben).

    Alternativ kannst Du Dir auch eine kleine Funktion bauen die etwas ähnliches macht:

    Code:
    let chain = function(funcA, funcB) {
      return funcB(funcA());
    }
    
    // mit den Funktionen oben dann so aufrufen
    let barResult = chain(() => foo(param), bar);
    Sieht aber nicht ganz so schön aus. Es gibt auch die Möglichkeit immer Objekte zurück zu geben, die alle immer dieselben Funktionen unterstützen. So eine Art DSL. Kommt ein bisschen darauf an was Du tun willst

    Comment


    • #3
      Hi,

      Danke für Deine Antwort.
      Das funktioniert natürlich, nicht weil Du versuchst auf dem Rückgabewert der ersten Funktion die Funktion bla aufzurufen.
      Ja, genau das wäre mein Ziel gewesen. Folgendes Beispiel funktioniert ja bsp.:
      Code:
      console.log( foo(param).innerHTML );
      Die Funktion foo liefert mir ja ein DOM Element und die implizierten Methoden dafür kann ich ja anwenden.

      Mein Ziel war/ist also das Element-Objekt um die Methode bar() zu erweitern.
      Hatte vielleicht an prototype gedacht, aber das hat so nicht hingehauen.

      Falls Du noch einen Tipp in die Richtung hast, wär gut. Ansonsten trotzdem danke für Deine Hinweise!

      EDIT:
      Da fällt mir gerade ein, ich könnte doch eine Klasse schreiben, die ich von der Element-Klasse erben lasse ( extends ).
      Wenn ich dann in foo() ein Objekt meiner Klasse zurückgebe, müsste das eigentlich - wie bspw. in PHP - gehen, oder?

      Muss ich nachher mal testen.

      Gruß Arne
      PHP rocks!
      Eine Initiative der PHP Community

      Comment


      • #4
        Out of the Box wird das nicht gehen. jQuery funktioniert glaube ich so wie Du das möchtest. Allerdings packt jQuery immer ein jQuery Element um das DOM-Element und dann kannst Du im Prinzip machen was Du willst. Käme für mich nur in Frage, wenn ich eine Library oder ein Framework baue.

        Comment

        Working...
        X