Heim > Web-Frontend > js-Tutorial > Umgang mit „dieser' Referenz in Prototypmethoden mit setInterval und setTimeout: Was sind die Lösungen?

Umgang mit „dieser' Referenz in Prototypmethoden mit setInterval und setTimeout: Was sind die Lösungen?

Linda Hamilton
Freigeben: 2024-10-18 15:03:30
Original
386 Leute haben es durchsucht

Handling

Umgang mit dieser Referenz in Prototyp-Methoden mit setInterval und setTimeout

In JavaScript verliert eine Prototyp-Methode ihre This-Zuordnung, wenn sie extrahiert und an anderer Stelle übergeben wird. Betrachten Sie den folgenden Code:

function Foo() {}
Foo.prototype = {
  bar: function () {
    this.baz();
  },
  baz: function () {
    this.draw();
    requestAnimFrame(this.baz);
  }
};
Nach dem Login kopieren

Dieser Code schlägt mit einem Fehler fehl, da er nicht ordnungsgemäß in die Rückrufe setInterval oder setTimeout eingebunden ist.

Lösungen:

Es gibt mehrere Möglichkeiten, mit diesem Problem umzugehen:

Wrap-Methodenaufruf in anonymer Funktion:

var that = this;
setInterval(function () {
  return that.baz();
}, 1000);
Nach dem Login kopieren

Dadurch bleibt dies von der äußeren Funktion mithilfe von a erhalten Hilfsvariable.

Wrap-Methodenaufruf in der Fat-Arrow-Funktion:

setInterval(() => this.baz(), 1000);
Nach dem Login kopieren

Anonyme Fat-Arrow-Funktionen behalten dies von der umgebenden Funktion bei.

Verwenden Sie eine Bindungsfunktion:

setInterval(this.baz.bind(this), 1000);

// dojo toolkit example:
setInterval(dojo.hitch(this, 'baz'), 10);
Nach dem Login kopieren

Bindungsfunktionen wie Function.prototype.bind oder Bibliotheksäquivalente ermöglichen Ihnen die explizite Bindung dieses Kontexts.

Das obige ist der detaillierte Inhalt vonUmgang mit „dieser' Referenz in Prototypmethoden mit setInterval und setTimeout: Was sind die Lösungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
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