Heim > Web-Frontend > js-Tutorial > Warum funktioniert „bind()' nicht mit Pfeilfunktionen „this'?

Warum funktioniert „bind()' nicht mit Pfeilfunktionen „this'?

Barbara Streisand
Freigeben: 2024-12-13 17:07:09
Original
771 Leute haben es durchsucht

Why Doesn't `bind()` Work with Arrow Functions' `this`?

Rätsel der Bindung von „dies“ in Pfeilfunktionen: Ein aufgedecktes Dilemma

Trotz der verführerischen Einfachheit von Pfeilfunktionen ist ihr unergründliches Verhalten in Bezug auf „ Dies hat viele Entwickler verwirrt. Die Unfähigkeit, „dies“ an einen bestimmten Kontext innerhalb einer Pfeilfunktion zu binden, ist zu einer wiederkehrenden Quelle der Frustration geworden.

Um das Dilemma zu veranschaulichen, betrachten Sie diesen Code:

const f = () => console.log(this);

const o = { a: 42 };

const fBound = f.bind(o);

fBound(); // Expected: { a: 42 }, Actual: { window: Window }
Nach dem Login kopieren

In diesem Beispiel , versuchen wir, den „this“-Kontext der Pfeilfunktion „f“ mit der Methode „bind()“ an das Objekt „o“ zu binden. Der Aufruf von „fBound()“ protokolliert jedoch aus unerklärlichen Gründen das globale „window“-Objekt anstelle des erwarteten „o“-Objekts.

Dieses verwirrende Verhalten liegt in der inhärenten Natur von Pfeilfunktionen begründet. Im Gegensatz zu regulären Funktionen, die ihren eigenen „This“-Kontext haben, erben Pfeilfunktionen ihre „This“-Bindung vom umgebenden lexikalischen Bereich. In diesem Fall wurde „f“ innerhalb des globalen Bereichs definiert, wodurch „this“ an das globale „window“-Objekt gebunden wurde.

In der ECMAScript 2015-Spezifikation heißt es eindeutig:

„Jeder Verweis auf arguments, super, this oder new.target innerhalb einer ArrowFunction müssen in eine Bindung in einer lexikalisch umschließenden Umgebung aufgelöst werden. Das erneute Binden von „this“ innerhalb einer Pfeilfunktion wird unmöglich. „this“ bleibt für immer in dem Kontext verankert, in dem die Pfeilfunktion definiert wurde.

Wenn die sinnvolle Verwendung von „this“ für Ihren Code von entscheidender Bedeutung ist, besteht die umsichtige Vorgehensweise darin, reguläre Funktionen anstelle von zu verwenden Pfeilfunktionen. Reguläre Funktionen bieten eine bessere Kontrolle über die „this“-Bindung und ermöglichen es Ihnen, „this“ mithilfe von „bind()“ oder anderen Methoden explizit an den gewünschten Kontext zu binden.

Das obige ist der detaillierte Inhalt vonWarum funktioniert „bind()' nicht mit Pfeilfunktionen „this'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage