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!