Heim >Web-Frontend >js-Tutorial >Wie behalte ich den richtigen „diesen' Kontext in „setTimeout'-Rückrufen bei?

Wie behalte ich den richtigen „diesen' Kontext in „setTimeout'-Rückrufen bei?

Barbara Streisand
Barbara StreisandOriginal
2024-12-10 12:05:14885Durchsuche

How to Maintain the Correct `this` Context in `setTimeout` Callbacks?

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:

  1. Speichern Sie den Kontext:

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);
}
  1. Bind-Methode verwenden (ES5):

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);
}
  1. Verwenden Sie Pfeilfunktionen (ES6):

Pfeilfunktionen erben diesen Wert automatisch aus ihrem Lexikon Geltungsbereich.

if (this.options.destroyOnHide) {
     setTimeout(() => { this.tip.destroy() }, 1000);
}
  1. Argumente an den Rückruf übergeben (HTML5):

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!

Stellungnahme:
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