Wie übergebe ich "this" an window setInterval

8

Angenommen, ich habe eine Funktion a:

%Vor%

Wenn also a.set () aufgerufen wird, wird die anonyme Funktion aufgerufen. Aber das wird nicht funktionieren, da dies zu dem Zeitpunkt ist, an dem die Funktion ausgelöst wird, auf das Fensterobjekt zeigt. Es ist auch keine gute Idee, a.b zu verwenden, da es mehrere Instanzen von a geben kann.

Was ist eine gute Lösung für dieses Problem?

    
NSF 08.06.2012, 06:27
quelle

5 Antworten

16

Speichern Sie einen Verweis auf this :

%Vor%

Die an setInterval übergebene anonyme Funktion hat Zugriff auf alle Variablen in ihrem enthaltenden Bereich, d. h. auf alle lokalen Variablen von function a() . Die Magie von JS-Closures hält diese Variablen am Leben, selbst nachdem a() abgeschlossen wurde, und jeder Aufruf von a() erhält seine eigene Schließung.

    
nnnnnn 08.06.2012, 06:30
quelle
4

Dies wäre die sauberste Lösung, da Sie den Kontext für Ihre aufeinanderfolgenden Methodenaufrufe meistens wechseln möchten:

%Vor%     
Dbl 05.11.2014 14:46
quelle
3

Da wir jetzt ES6 haben, brauchen wir hier eine andere Antwort:

Verwenden Sie eine Pfeilfunktion:

%Vor%

Pfeilfunktionen haben, im Gegensatz zu normalen Funktionen, keinen eigenen this -Kontext. Dies bedeutet, dass Sie Zugriff auf das äußere this haben.

    
Lux 15.08.2017 23:28
quelle
2

Speichern Sie einfach Ihre this Referenz in einer anderen Variablen, die später nicht von window -call überschrieben wird. Später können Sie diese Variable verwenden, um auf das Objekt zu verweisen, mit dem Sie begonnen haben.

%Vor%     
Sirko 08.06.2012 06:29
quelle
0

In Ihrem Fall können Sie einfach:

%Vor%

Normalerweise können wir auch eine Hilfsmethode Function.prototype.bind für fix die this Referenz.

    
Jeffrey Zhao 08.06.2012 06:29
quelle

Tags und Links