Maison >interface Web >js tutoriel >Explication détaillée de la façon d'utiliser la méthode de liaison de fonction en Javascript

Explication détaillée de la façon d'utiliser la méthode de liaison de fonction en Javascript

伊谢尔伦
伊谢尔伦original
2017-07-20 14:11:463256parcourir

Function.prototype.bind()

La méthode bind est utilisée pour spécifier le pointeur this à l'intérieur de la fonction (la portée dans laquelle elle est exécutée), puis renvoie une nouvelle fonction. La méthode bind n’exécute pas une fonction immédiatement.


var keith = {
 a: 1,
 count: function() {
 console.log(this.a++);
 }
 };
 keith.count(); //1
 keith.count(); //2
 keith.count(); //3

Dans le code ci-dessus, si this.a pointe vers la propriété a à l'intérieur de l'objet Keith, si cette méthode est affectée à une autre variable, elle sera appelé quand il sera appelé. Quelque chose s'est mal passé.


 var keith = {
 a: 1,
 count: function() {
 console.log(this.a++);
 }
 };
 var f = keith.count;
 f(); //NaN

Dans le code ci-dessus, si la méthode count est assignée à la variable f, alors l'objet this ne pointe plus vers l'objet Keith, mais vers la fenêtre objet. Et window.a est par défaut undefined Après l'opération d'incrémentation, undefined++ est égal à NaN.

Afin de résoudre ce problème, vous pouvez utiliser la méthode bind pour lier ceci dans l'objet Keith à l'objet Keith, ou l'appeler directement.


 var f = keith.count.bind(keith);
 f(); //1
 f(); //2
 f(); //3
 keith.count.bind(keith)() //1
 keith.count.bind(keith)() //2
 keith.count.bind(keith)() //3

Bien entendu, cela peut également être lié à d'autres objets.


 var obj = {
 a: 100
 };
 var f = keith.count.bind(obj);
 f(); //100
 f(); //101
 f(); //102

De même, nous pouvons également transmettre des paramètres à la méthode bind Si le premier paramètre est nul ou indéfini ou ceci, l'objet this à l'intérieur de la fonction pointera vers. l'environnement global ; le second est le paramètre requis lors de l'appel, et la forme de transmission des paramètres est la même que la méthode d'appel.


 function keith(a, b) {
 return a + b;
 }
 console.log(keith.apply(null,[1,4])); //5
 console.log(keith.call(null,1,4)); //5
 console.log(keith.bind(null, 1, 4)); //keith()
 console.log(keith.bind(null, 1, 4)()); //5

Dans le code ci-dessus, vous pouvez voir la différence entre call, apply et bind : Les méthodes call et apply sont exécutées immédiatement après avoir été appelées. Après l'appel de liaison, il revient à la fonction d'origine, qui doit être rappelée , ce qui est un peu comme une fermeture

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