Eines der Hauptmerkmale von Pfeilfunktionen ist, dass sie über das this
aus dem Kontext schließen, in dem sie erstellt wurden. Sie bekommen es nicht basierend darauf, wie sie aufgerufen werden, wie andere Funktionen es tun. Also ...
Aber Ihre Funktion hängt davon ab, dass this
davon abhängt, wie sie aufgerufen wird.
Dies ist kein Anwendungsfall für Pfeilfunktionen. Verwenden Sie eine normale Funktion:
%Vor% Oder noch besser: Verwenden Sie die neue class
-Syntax:
Arrow function
würde den Kontext auflösen this
gehört zu dem Bereich, in dem die Funktion definiert wurde. Ich glaube, Sie haben diese Funktion in window
scope definiert. Der this
zeigt also in Ihrer Funktion auf window
.
Sie können hier normal anonymous function
verwenden. Und wir müssen bei der Verwendung von Pfeilfunktionen vorsichtig sein.
Zusätzlich zu @ tj-crowder steht answer , ich wollte einen Testfall (mocha assert) hinterlassen, mit dem man sich vorstellen kann, was nicht funktioniert.
Sie können hier auch mehr über den Umfang der Pfeilfunktionen lesen:
Du kennst JS nicht
von Kyle Simpson, der this
im Detail erklärt.
Grundsätzlich zeigt this
einer Pfeilfunktion auf den umgebenden Kontext des aktuellen Kontextes, was praktisch ist, wenn Sie umschließende Funktionen haben.
Was es macht, ist im Grunde genommen das var self = this;
Ding.
Oder wie Kyle sagt:
[...] Lexical
this
im Pfeilfunktions-Callback im vorherigen Snippet zeigt nun auf denselben Wert wie in der umschließendenmakeRequest(..)
-Funktion. Mit anderen Worten,=>
ist eine syntaktische Stand-in fürvar self = this
.In Fällen, in denen
var self = this
(oder alternativ eine Funktion.bind(this)
call) normalerweise hilfreich wäre, sind=>
arrow-Funktionen eine bessere Alternative, die nach dem gleichen Prinzip arbeitet. [...]
Sie können es selbst testen mit meinem Kern: Ссылка
In meinem Testfall war das die Ausgabe:
%Vor%BEARBEITEN: hinzugefügtes Beispiel / Referenz zu Kyle Simpsons "Du weißt ES6 nicht" Ссылка
Tags und Links javascript lambda