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
Freigeben: 2024-12-10 12:05:14
Original
930 Leute haben es durchsucht

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);
}
Nach dem Login kopieren

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

Pfeilfunktionen erben diesen Wert automatisch aus ihrem Lexikon Geltungsbereich.

if (this.options.destroyOnHide) {
     setTimeout(() => { this.tip.destroy() }, 1000);
}
Nach dem Login kopieren
  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);
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage