Heim >Web-Frontend >js-Tutorial >Wie behalte ich den richtigen „diesen' Kontext in „setTimeout'-Rückrufen bei?
Sicherstellen, dass dieser Kontext in setTimeout-Rückrufen korrekt ist
Bei der Verwendung von setTimeout zum Planen einer Rückruffunktion ist es wichtig sicherzustellen, dass die Funktion den behält gewünschten Kontext. Es treten jedoch Probleme auf, wenn sich dies auf das globale Objekt innerhalb des Rückrufs bezieht.
Im bereitgestellten Beispiel:
if (this.options.destroyOnHide) { setTimeout(function() { this.tip.destroy() }, 1000); }
bezieht sich dies auf das globale Fenster, nicht auf das beabsichtigte Objekt. Um dies zu verhindern, gibt es mehrere Ansätze:
Speichern Sie einen Verweis auf den aktuellen Kontext, bevor Sie setTimeout aufrufen.
var that = this; if (this.options.destroyOnHide) { setTimeout(function(){ that.tip.destroy() }, 1000); }
Erstellen Sie mit bind eine neue Funktion, die an den richtigen Kontext gebunden ist.
if (this.options.destroyOnHide) { setTimeout(function() { this.tip.destroy() }.bind(this), 1000); }
Pfeilfunktionen erben diesen Wert automatisch aus ihrem Lexikon Geltungsbereich.
if (this.options.destroyOnHide) { setTimeout(() => { this.tip.destroy() }, 1000); }
Die Timer von HTML5 ermöglichen die Übergabe von Argumenten an den Rückruf.
if (this.options.destroyOnHide) { setTimeout(function(that){ that.tip.destroy() }, 1000, this); }
Denken Sie daran, dass der Kontext davon variieren kann, je nachdem, wie die Funktion aufgerufen wird. Um das gewünschte Verhalten sicherzustellen, überlegen Sie sich den geeigneten Ansatz basierend auf den verfügbaren Sprachfunktionen.
Das obige ist der detaillierte Inhalt vonWie behalte ich den richtigen „diesen' Kontext in „setTimeout'-Rückrufen bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!