Heim >Web-Frontend >js-Tutorial >Wie kann „dieser' Bereich beibehalten werden, wenn Instanzmethoden als Rückrufe in JavaScript verwendet werden?

Wie kann „dieser' Bereich beibehalten werden, wenn Instanzmethoden als Rückrufe in JavaScript verwendet werden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-06 19:54:03848Durchsuche

How to Preserve `this` Scope When Using Instance Methods as Callbacks in JavaScript?

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!
  }
  ...
};
Dadurch kann

abc auch innerhalb eingebetteter Funktionen die korrekte Objektreferenz beibehalten.

Fazit

Aliasing

dies 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!

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