Meteor: Warum verliere ich meinen Datenkontext, indem ich function () {} in () = {} umschalte?

8

Also experimentiere ich mit ES6, habe das grigio: babel-Paket installiert und fange an, meinen es5-Code durchzugehen und ihn auf einige der neuen ES6-Syntax zu aktualisieren, als ich auf ein Problem stieß.

Ursprünglich sahen meine Vorlagenhelfer so aus:

%Vor%

was in einer Blaze jeder Schleife als solche verwendet wird

%Vor%

Wie zu erwarten, hatten alle meine Ereignishandler für die Elemente in dieser Ereignisschleife Zugriff auf die Felder in der Mongo Collection, die von exampleHelper über das Schlüsselwort this zurückgegeben werden. this.exampleField würde genau das zurückgeben, was ich erwarten würde.

Jetzt ist der Punkt, an dem ich mit der Aktualisierung auf ES6 begonnen habe. Aus irgendeinem Grund unterbricht die folgende Syntax den Datenkontext. Statt this gibt also zurück, was Sie erwarten würden, stattdessen wird Window zurückgegeben:

%Vor%

Das obige war mein erster Versuch, dann versuchte ich:

%Vor%

Also habe ich den obigen ES6-Code über Babeljs 'Online-Übersetzer ausgeführt und folgendes erhalten, was offensichtlich falsch ist, da ich keine benannte Funktion haben möchte:

%Vor%

Kann mir jemand sagen, wie die richtige Syntax aussehen soll?

    
Kris 03.07.2015, 04:07
quelle

2 Antworten

4
  

Kann mir jemand sagen, wie die richtige Syntax aussehen soll?

Dein ursprünglicher Code war völlig in Ordnung. Sie müssen die Funktionen nicht missbrauchen und sie nur verwenden, um sie zu verwenden, einige Keystokes usw. zu speichern. In diesem Fall sollten Sie die normale anonyme Funktion verwenden.

Der Grund, warum Sie diese Verwirrung haben, weil this auf ein globales Objekt zeigt, liegt daran, dass Pfeilfunktionen funktionieren: Sie haben lexikalisch this , nicht dynamisch . Dies bedeutet, dass this reference zum Zeitpunkt der Erstellung der Funktion statisch an den Funktionskontext gebunden ist (in Ihrem Fall war es window ) und zur Laufzeit nicht dynamisch aufgelöst wird.

    
dfsq 03.07.2015, 05:33
quelle
2

Dieser Code wird nicht funktionieren (es wird das Fensterobjekt angezeigt):

%Vor%

Wenn Sie die => -Syntax verwenden, möchte sie Folgendes tun:

%Vor%

In diesem Fall entspricht this tatsächlich window . Die Lösung besteht darin, => in diesem Szenario nicht zu verwenden.

    
CaptSaltyJack 03.07.2015 04:52
quelle

Tags und Links