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:
bind() method on line 14.
Lassen Sie es uns aufschlüsseln. Wenn wir die bind()
Methode verwenden:
- Die JS-Engine erstellt eine neue
pokemonName
Instanz und bindetpokemon
alsthis
Variable. Es ist wichtig zu verstehen, dass es die pokemonName-Funktion kopiert. - Nach dem Erstellen einer Kopie der
pokemonName
-Funktion kannlogPokemon()
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:
- Akzeptiert auch zusätzliche Parameter
- Führt die aufgerufene Funktion sofort aus.
- 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:
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 ❤
Leave a Reply