Maison > interface Web > js tutoriel > Explication détaillée de la façon d'utiliser le code de liaison de fonction pour l'interaction javascript

Explication détaillée de la façon d'utiliser le code de liaison de fonction pour l'interaction javascript

伊谢尔伦
Libérer: 2017-07-20 10:32:14
original
1483 Les gens l'ont consulté

Liaison de fonction

Dans l'interaction entre JavaScript et DOM, il est souvent nécessaire d'utiliser la liaison de fonction Définir une fonction puis la lier à un élément DOM spécifique ou. Sur un programme déclencheur d'événements, les fonctions de liaison sont souvent utilisées avec des fonctions de rappel et des gestionnaires d'événements afin de transmettre des fonctions en tant que variables tout en conservant l'environnement d'exécution du code

<button id="btn">按钮</button>
<script>      
  var handler={
    message:"Event handled.",
    handlerFun:function(){
      alert(this.message);
    }
  };
btn.onclick = handler.handlerFun;
</script>
Copier après la connexion

Le code ci-dessus crée un objet gestionnaire. La méthode handler.handlerFun() est affectée en tant que gestionnaire d'événements pour un bouton DOM. Lorsque le bouton est enfoncé, cette fonction est appelée et une boîte d'alerte s'affiche. Bien qu'il semble que la boîte d'avertissement doive afficher Événement géré, elle affiche en réalité undefiend. Le problème est que l'environnement de handler.handleClick() n'est pas enregistré, donc cet objet finit par pointer vers le bouton DOM au lieu de handler

Vous pouvez utiliser des fermetures pour corriger ce problème

<button id="btn">按钮</button>
<script>      
var handler={
  message:"Event handled.",
  handlerFun:function(){
    alert(this.message);
  }
};
btn.onclick = function(){
  handler.handlerFun();  
}
</script>
Copier après la connexion

Bien sûr, il s'agit d'une solution spécifique à ce scénario, la création de plusieurs fermetures peut rendre le code difficile à comprendre et à déboguer. Une meilleure approche consiste à utiliser la liaison de fonction

Une fonction de liaison simple bind() prend une fonction et un environnement et renvoie une fonction qui appelle la fonction donnée dans l'environnement donné, et. passer tous les paramètres intacts

function bind(fn,context){
  return function(){
    return fn.apply(context,arguments);
  }
}
Copier après la connexion

Cette fonction semble simple, mais sa fonction est très puissante. Une fermeture est créée dans bind(). La fermeture utilise apply() pour appeler la fonction entrante et transmet l'objet contextuel et les paramètres à apply(). Lorsque la fonction renvoyée est appelée, elle exécutera la fonction passée dans l'environnement donné et donnera tous les paramètres.

<button id="btn">按钮</button>
<script> 
function bind(fn,context){
  return function(){
    return fn.apply(context,arguments);
  }
}     
var handler={
  message:"Event handled.",
  handlerFun:function(){
    alert(this.message);
  }
};
btn.onclick = bind(handler.handlerFun,handler);
</script>
Copier après la connexion

ECMAScript5 définit une méthode native bind() pour toutes les fonctions, simplifiant encore davantage l'opération.

Tant qu'un pointeur de fonction est passé en tant que valeur et que la fonction doit être exécutée dans un environnement spécifique, l'utilité de la fonction liée est mise en évidence. Ils sont principalement utilisés dans les gestionnaires d'événements et setTimeout() et setInterval(). Cependant, les fonctions liées ont plus de temps système que les fonctions normales, elles nécessitent plus de mémoire et, comme les appels de fonctions multiples sont légèrement plus lents, il est préférable de les utiliser uniquement lorsque cela est nécessaire.

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal