Maison > interface Web > js tutoriel > Pourquoi `$(this)` se comporte-t-il mal avec les fonctions fléchées jQuery et ES6 ?

Pourquoi `$(this)` se comporte-t-il mal avec les fonctions fléchées jQuery et ES6 ?

Barbara Streisand
Libérer: 2024-12-13 10:11:17
original
278 Les gens l'ont consulté

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

Utilisation de $(this) de jQuery avec les fonctions fléchées ES6 : liaison lexicale de cette

Lors de l'utilisation de $(this) de jQuery avec les fonctions fléchées ES6, les développeurs peuvent rencontrer un problème où $(this) est converti en une fermeture de style ES5 en utilisant self = this. Ce comportement est dû à la nature de liaison lexicale des fonctions fléchées.

Problème :

Le code suivant illustre le problème :

class Game {
  foo() {
    self = this;
    this._pads.on('click', function() {
      if (self.go) { $(this).addClass('active'); }
    });
  }
}
Copier après la connexion

Quand une fonction de flèche est utilisée à la place :

class Game {
  foo() {
    this._pads.on('click', () => {
      if (this.go) { $(this).addClass('active'); }
    });
  }
}
Copier après la connexion

$(this) est converti en une fermeture de style ES5, conduisant à un résultat inattendu comportement.

Solution :

Ce problème est une caractéristique inhérente aux fonctions fléchées ES6 et ne peut pas être contourné à l'aide de Traceur. Pour résoudre ce problème, il faut éviter d'utiliser ceci pour accéder à l'élément cliqué. Au lieu de cela, la propriété event.currentTarget peut être utilisée :

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

jQuery fournit spécifiquement event.currentTarget pour les situations où cette liaison peut être ambiguë en raison de facteurs externes, tels que la fonction de rappel étant liée à un autre contexte. via .bind().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal