Maison  >  Article  >  interface Web  >  Explication détaillée des différences de source et de contact entre les méthodes d'appel, d'application et de liaison en Javascript avec des exemples

Explication détaillée des différences de source et de contact entre les méthodes d'appel, d'application et de liaison en Javascript avec des exemples

伊谢尔伦
伊谢尔伦original
2017-07-20 14:04:431458parcourir

L'origine de la méthode call/apply/bind

Tout d'abord, lors de l'utilisation des méthodes call, apply et bind, il nous faut savoir où sont ces trois les méthodes viennent-elles ? Pourquoi ces trois méthodes peuvent-elles être utilisées ?

Les trois méthodes call, apply et bind sont en fait héritées de Function.prototype et sont des méthodes d'instance.


 console.log(Function.prototype.hasOwnProperty('call')) //true
 console.log(Function.prototype.hasOwnProperty('apply')) //true
 console.log(Function.prototype.hasOwnProperty('bind')) //true

Dans le code ci-dessus, true est renvoyé, indiquant que les trois méthodes sont héritées de Function.prototype. Bien entendu, les objets, fonctions et tableaux ordinaires héritent tous des trois méthodes de l'objet Function.prototype, ces trois méthodes peuvent donc être utilisées dans des objets, des tableaux et des fonctions.

Objet lié à la fonction de rappel

Si cet objet est utilisé dans la fonction de rappel, alors cet objet pointera vers l'objet DOM, qui est l'objet bouton. Si vous souhaitez résoudre le problème de ce pointage dans la fonction de rappel, vous pouvez utiliser la méthode suivante.


var o = {
 f: function() {
 console.log(this === o);
 }
 }
 $('#button').on('click', function() {
 o.f.apply(o);
 //或者 o.f.call(o);
 //或者 o.f.bind(o)();
 });

Après avoir cliqué sur le bouton, la console affichera vrai. Étant donné que la méthode apply (ou la méthode call) lie non seulement l'objet sur lequel la fonction est exécutée, mais exécute également la fonction immédiatement (alors que la méthode bind ne s'exécute pas immédiatement, veuillez noter la différence), l'instruction de liaison doit être écrite en un corps fonctionnel.

La connexion et la différence entre les méthodes call, apply et bind

En fait, ces trois méthodes sont utilisées pour spécifier le problème pointé par ceci à l'intérieur de la fonction. Ils sont presque les mêmes, mais il existe des différences de forme. Les lecteurs peuvent essayer de mettre en œuvre les exemples ci-dessus de trois manières.

Pour résumer les méthodes call, apply et bind :

a : Le premier paramètre spécifie le pointeur de this à l'intérieur de la fonction (la portée où la fonction est exécutée), et alors Cette fonction est appelée selon la portée spécifiée.

b : Les paramètres peuvent être transmis lors de l'appel de fonctions. Les méthodes call et bind doivent être transmises directement, tandis que la méthode apply doit être transmise sous la forme d'un tableau.

 c : Les méthodes call et apply exécutent la fonction immédiatement après l'appel, tandis que la méthode bind ne s'exécute pas immédiatement et la fonction doit être à nouveau exécutée. Ça sent un peu fermé.

 d : Le problème de la modification du pointage de cet objet n'est pas seulement les méthodes d'appel, d'application et de liaison, mais aussi la variable that qui peut être utilisée pour corriger le pointage de celui-ci.

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