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

source:php.cn
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