Heim >Web-Frontend >js-Tutorial >Warum schlägt „$(this)' in jQuery-Click-Handlern mit ES6-Pfeilfunktionen fehl?

Warum schlägt „$(this)' in jQuery-Click-Handlern mit ES6-Pfeilfunktionen fehl?

DDD
DDDOriginal
2024-12-15 19:47:14152Durchsuche

Why Does `$(this)` Fail in jQuery Click Handlers with ES6 Arrow Functions?

ES6-Pfeilfunktionen und jQuery $(this): Bindungsverwirrung

ES6-Pfeilfunktionen stellen diese lexikalische Bindung bereit und vereinfachen den Code, indem sie die Notwendigkeit beseitigen für explizite bind()-Aufrufe. Bei Verwendung mit der Klickbindung von jQuery kann dieses Verhalten jedoch Probleme verursachen.

Unerwartetes Verhalten mit Pfeilfunktionen:

Beachten Sie den folgenden Code:

class Game {
  foo() {
    this._pads.on('click', function() {
      if (this.go) { $(this).addClass('active'); }
    });
  }
}

Durch Verwendung einer Pfeilfunktion stattdessen:

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

Die $(this)-Referenz wird in konvertiert ein Verschluss im ES5-Stil (self = this).

Verstehen der ES6-Pfeilfunktionsbindung:

Dieses Verhalten ist den ES6-Pfeilfunktionen inhärent und kein Problem mit Traceur Übersetzung. Pfeilfunktionen binden diese immer lexikalisch an den umschließenden Kontext. In diesem Fall die foo()-Methode.

Lösung mit event.currentTarget:

Um das Problem zu beheben, verwenden Sie event.currentTarget anstelle von $(this) to Greifen Sie innerhalb des Rückrufs der Pfeilfunktion auf das angeklickte Element zu:

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

jQuery stellt speziell event.currentTarget bereit, um Situationen zu berücksichtigen, in denen die Rückruffunktion erforderlich ist Möglicherweise haben Sie keinen Zugriff auf den richtigen Kontext.

Das obige ist der detaillierte Inhalt vonWarum schlägt „$(this)' in jQuery-Click-Handlern mit ES6-Pfeilfunktionen fehl?. 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