Articles

Javascript: call(), apply() und bind()

call(), apply() und bind() — eine neue Hoffnung

Bisher haben wir Funktionen als Objekte behandelt, die aus einem Namen (optional, kann auch eine anonyme Funktion sein) und dem Code bestehen, den er beim Aufruf ausführt. Aber das ist nicht die ganze Wahrheit. Als wahrheitsliebende Person muss ich Sie wissen lassen, dass eine Funktion tatsächlich näher am folgenden Bild aussieht:

Was ist das hier??????? Keine Sorge! Ich werde nun diese 3 ähnlichen Methoden, die für jede Funktion angezeigt werden, mit Beispielen durchgehen. Freut euch!

bind()

Die offiziellen Dokumente sagen: Die bind() Methode erstellt eine neue Funktion, deren this Schlüsselwort beim Aufruf auf den angegebenen Wert gesetzt ist. (Es geht tatsächlich um noch mehr Sachen, aber wir lassen das für ein anderes Mal 🙂 )

Dies ist extrem mächtig. Damit können wir den Wert von this beim Aufruf einer Funktion explizit definieren. Schauen wir uns cooooode an:

Verwenden Sie die bind() method on line 14.

Lassen Sie es uns aufschlüsseln. Wenn wir die bind() Methode verwenden:

  1. Die JS-Engine erstellt eine neue pokemonName Instanz und bindet pokemon als this Variable. Es ist wichtig zu verstehen, dass es die pokemonName-Funktion kopiert.
  2. Nach dem Erstellen einer Kopie der pokemonName -Funktion kann logPokemon() aufgerufen werden, obwohl sie ursprünglich nicht auf dem Pokemon-Objekt war. Es erkennt nun seine Eigenschaften (Pika und Chu) und seine Methoden.

Und das Coole ist, nachdem wir einen Wert gebunden haben, können wir die Funktion wie jede andere normale Funktion verwenden. Wir könnten sogar die Funktion aktualisieren, um Parameter zu akzeptieren, und sie wie folgt übergeben:

call(), apply()

Die offiziellen Dokumente für call() sagen: Die call() Methode ruft eine Funktion mit einer gegebenen this Wert und Argumente einzeln angegeben.

Das bedeutet, dass wir jede Funktion aufrufen und explizit angeben können, worauf this innerhalb der aufrufenden Funktion verweisen soll. Wirklich ähnlich der bind() Methode! Dies kann uns definitiv davor bewahren, hackigen Code zu schreiben (obwohl wir alle noch Hackerzzz sind).

Der Hauptunterschied zwischen bind() und call() besteht darin, dass die call() Methode:

  1. Akzeptiert auch zusätzliche Parameter
  2. Führt die aufgerufene Funktion sofort aus.
  3. Die call() Methode erstellt keine Kopie der Funktion, für die sie aufgerufen wird.

call() und apply() dienen genau demselben Zweck. Der einzige Unterschied zwischen ihrer Funktionsweise besteht darin, dass call() erwartet, dass alle Parameter einzeln übergeben werden, während apply() ein Array aller unserer Parameter erwartet. Beispiel:

Beachten Sie, dass apply akzeptiert und Array, und call erwartet jeden Parameter einzeln.

Diese eingebauten Methoden, die in jeder JS-Funktion vorhanden sind, können sehr nützlich sein. Selbst wenn Sie sie nicht in Ihrer täglichen Programmierung verwenden, werden Sie immer noch oft darauf stoßen, wenn Sie den Code anderer Leute lesen.

Wenn Sie Fragen haben, wenden Sie sich wie immer an Instagram ❤