ホームページ > ウェブフロントエンド > jsチュートリアル > `$(this)` が jQuery および ES6 のアロー関数で誤動作するのはなぜですか?

`$(this)` が jQuery および ES6 のアロー関数で誤動作するのはなぜですか?

Barbara Streisand
リリース: 2024-12-13 10:11:17
オリジナル
204 人が閲覧しました

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

ES6 アロー関数で jQuery $(this) を使用する: 字句 This バインディング

ES6 アロー関数で jQuery の $(this) を使用する場合、開発者は、$(this) が self = this を使用して ES5 スタイルのクロージャに変換されるという問題に遭遇する可能性があります。この動作は、アロー関数の字句結合の性質によるものです。

問題:

次のコードは、この問題を示しています。

class Game {
  foo() {
    self = this;
    this._pads.on('click', function() {
      if (self.go) { $(this).addClass('active'); }
    });
  }
}
ログイン後にコピー

When代わりにアロー関数が使用されます:

class Game {
  foo() {
    this._pads.on('click', () => {
      if (this.go) { $(this).addClass('active'); }
    });
  }
}
ログイン後にコピー

$(this) は、 ES5 スタイルのクロージャーにより、予期せぬ動作が発生します。

解決策:

この問題は ES6 アロー関数の固有の特性であり、Traceur を使用して回避することはできません。これを解決するには、クリックされた要素へのアクセスにこれを使用しないようにする必要があります。代わりに、event.currentTarget プロパティを使用できます。

class Game {
  foo() {
    this._pads.on('click', (event) => {
      if (this.go) { $(event.currentTarget).addClass('active'); }
    });
  }
}
ログイン後にコピー

jQuery は、コールバック関数が別のコンテキストにバインドされているなど、外部要因によりこのバインディングがあいまいになる可能性がある状況に備えて、event.currentTarget を特別に提供します。 .bind() 経由。

以上が`$(this)` が jQuery および ES6 のアロー関数で誤動作するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート