Maison > interface Web > js tutoriel > le corps du texte

Pourquoi « ceci » se comporte-t-il de manière inattendue dans les gestionnaires d'événements JavaScript ?

Susan Sarandon
Libérer: 2024-10-28 02:44:02
original
1030 Les gens l'ont consulté

 Why Does

Le "ceci" ambigu dans les gestionnaires d'événements

Lorsque vous travaillez avec JavaScript, il est courant de créer des gestionnaires d'événements à l'aide de la méthode addEventListener. Cependant, un comportement particulier apparaît lorsque l'on tente d'accéder aux propriétés d'un objet au sein de ces gestionnaires : "this" ne fait pas référence à l'objet mais plutôt à l'élément qui a déclenché l'événement.

Scénario de problème

Considérez le code suivant, qui illustre ce problème :

function ticketTable(ticks) {
  this.tickets = ticks;
}

ticketTable.prototype.render = function(element) {
  // Render table...
  cell1.addEventListener("click", this.handleCellClick, false);
};

ticketTable.prototype.handleCellClick = function() {
  // "this" refers to the clicked cell element, not the ticketTable object
  // ...
};
Copier après la connexion

Dans la fonction handleCellClick, l'accès à this.tickets échouerait car "this" fait référence à la cellule cliquée, et non à l'instance ticketTable.

Solution : Utiliser Bind

Pour résoudre ce problème, nous pouvons utiliser la méthode bind, qui nous permet de définir explicitement la valeur de "this" pour une fonction donnée .

function ticketTable(ticks) {
  this.tickets = ticks;
}

ticketTable.prototype.render = function(element) {
  // Render table...
  cell1.addEventListener("click", this.handleCellClick.bind(this), false);
};
Copier après la connexion

En utilisant bind(this), nous nous assurons que lorsque la fonction handleCellClick sera appelée ultérieurement, "this" fera correctement référence à l'objet ticketTable, nous permettant d'accéder à ses propriétés telles que this.tickets .

Solutions alternatives

Outre la liaison, d'autres approches incluent l'utilisation d'une fonction de gestionnaire d'événements explicitement définie pour utiliser "this" (pas la propriété onclick) ou la création d'un handleEvent spécial fonction pour gérer tous les événements.

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