Heim > Web-Frontend > js-Tutorial > Warum verhält sich „$(this)' bei jQuery- und ES6-Pfeilfunktionen schlecht?

Warum verhält sich „$(this)' bei jQuery- und ES6-Pfeilfunktionen schlecht?

Barbara Streisand
Freigeben: 2024-12-13 10:11:17
Original
205 Leute haben es durchsucht

Why Does `$(this)` Misbehave with jQuery and ES6 Arrow Functions?

Verwenden von jQuery $(this) mit ES6-Pfeilfunktionen: Lexikalische This-Bindung

Bei Verwendung von jQuerys $(this) mit ES6-Pfeilfunktionen, Entwickler können auf ein Problem stoßen, bei dem $(this) mithilfe von self = this in einen Abschluss im ES5-Stil konvertiert wird. Dieses Verhalten ist auf die lexikalische Bindungsnatur von Pfeilfunktionen zurückzuführen.

Problem:

Der folgende Code veranschaulicht das Problem:

class Game {
  foo() {
    self = this;
    this._pads.on('click', function() {
      if (self.go) { $(this).addClass('active'); }
    });
  }
}
Nach dem Login kopieren

Wann Stattdessen wird eine Pfeilfunktion verwendet:

class Game {
  foo() {
    this._pads.on('click', () => {
      if (this.go) { $(this).addClass('active'); }
    });
  }
}
Nach dem Login kopieren

$(this) wird in einen Abschluss im ES5-Stil umgewandelt, was zu unerwartetem Ergebnis führt Verhalten.

Lösung:

Dieses Problem ist ein inhärentes Merkmal der ES6-Pfeilfunktionen und kann mit Traceur nicht umgangen werden. Um dieses Problem zu beheben, muss man vermeiden, dies für den Zugriff auf das angeklickte Element zu verwenden. Stattdessen kann die Eigenschaft event.currentTarget verwendet werden:

class Game {
  foo() {
    this._pads.on('click', (event) => {
      if (this.go) { $(event.currentTarget).addClass('active'); }
    });
  }
}
Nach dem Login kopieren

jQuery stellt event.currentTarget speziell für Situationen bereit, in denen diese Bindung aufgrund externer Faktoren, wie z. B. der Bindung der Callback-Funktion an einen anderen Kontext, mehrdeutig sein kann über .bind().

Das obige ist der detaillierte Inhalt vonWarum verhält sich „$(this)' bei jQuery- und ES6-Pfeilfunktionen schlecht?. 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