dieses Rätsel bei JavaScript-Rückrufen
Beim Zuweisen von Instanzmethoden als Ereignishandler verschiebt sich der Umfang von diesem von der Objektinstanz an den Ereignisaufrufer. Dies kann ein Problem darstellen und erfordert die Verwendung einer Problemumgehung wie dieser:
function MyObject() { this.doSomething = function() { ... } var self = this $('#foobar').bind('click', function(){ self.doSomethng() // this.doSomething() would not work here }) }
Dieser Ansatz ist zwar funktionsfähig, kann aber umständlich erscheinen. Gibt es einen besseren Weg?
Den Abschluss verstehen
Das zugrunde liegende Problem geht über jQuery hinaus und wurzelt im Verhalten von Abschlüssen in JavaScript. Abschlüsse ermöglichen inneren Funktionen den Zugriff auf Variablen, die in ihren äußeren Bereichen deklariert sind. this ist jedoch eine spezielle Variable, die ihren Gültigkeitsbereich dynamisch ändern kann.
Um this in eingebettete Funktionen zu kanalisieren, kann man es einem Alias wie abc:
var abc = this; function xyz(){ // "this" is different here! --- but we don't care! console.log(abc); // now it is the right object! function qwe(){ // "this" is different here too! --- but we don't care! console.log(abc); // it is the right object here too! } ... };
abc auch innerhalb eingebetteter Funktionen die korrekte Objektreferenz beibehalten.
Fazit
Aliasingdies ermöglicht die effiziente Nutzung von Instanzmethoden als Rückrufe, ohne den Umfang zu beeinträchtigen. Diese Technik gilt nicht nur für dies, sondern auch für andere Pseudovariablen wie Argumente.
Das obige ist der detaillierte Inhalt vonWie kann „dieser' Bereich beibehalten werden, wenn Instanzmethoden als Rückrufe in JavaScript verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!