Maison  >  Article  >  interface Web  >  Comment puis-je préserver le contexte dans les rappels du gestionnaire d'événements en JavaScript ?

Comment puis-je préserver le contexte dans les rappels du gestionnaire d'événements en JavaScript ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-06 04:22:02712parcourir

How Can I Preserve Context in Event Handler Callbacks in JavaScript?

Préservation du contexte dans les rappels du gestionnaire d'événements : la technique « self = this »

En JavaScript, les méthodes d'instance en tant que rappels du gestionnaire d'événements peuvent entraîner une portée changements. Comme le démontre le code fourni, les liaisons d'événements nécessitent une variable pour préserver le contexte d'appel, ce qui conduit à l'affectation "var self = this".

Bien que fonctionnelle, cette approche soulève des inquiétudes quant à son efficacité. Une solution plus généralisée résout le problème principal : canaliser les variables dans des fonctions intégrées.

En JavaScript, les fermetures permettent d'accéder aux variables externes. Cependant, les pseudo-variables telles que « this » et « arguments » nécessitent une manipulation prudente. Leur attribution à des alias au sein de la fonction parent garantit leur disponibilité dans les fonctions intégrées.

Exemple

Pour utiliser "this" dans les fonctions intégrées, affectez-le à une variable et utilisez l'alias à la place :

var that = this;

function xyz() {
  // "this" is different here! --- but we don't care!
  console.log(that); // now it is the right object!
  
  function qwe() {
    // "this" is different here too! --- but we don't care!
    console.log(that); // it is the right object here too!
  }
  ...
};

Cette approche ne se limite pas à « ce » ; Les "arguments" nécessitent un traitement similaire pour garantir un accès cohérent dans les fonctions intégrées.

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:
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