Dans le livre JavaScript Ninja Secrets, il y a un exemple de bibliothèque de prototypes et de code de liaison de fonction :
Function.prototype.bind = function(){
var fn = this, args = Array.prototype.slice.call(arguments),
object = args.shift();
return function(){
return fn.apply(object,args.concat(Array.prototype.slice.call(arguments)));
};
};
var myObject = {a:"1"};
function myFunction(){
return this == myObject;
};
var aFunction = myFunction.bind(myObject);
aFunction();
J'utilise des points d'arrêt pour vérifier la fonctionbind
里面的fn指向myFunction
这个函数 这个我不太理解 我的理解是只要用Function.prototype
这个原型扩展的方法 此方法里面开始声明的变量var fn=this;
中fn
的指向就指向使用这个方法的函数 就像本例中的myFunction.bind(myObject);
调用bin
方法,fn
指向myFunction
Cette fonction, je ne sais pas si c'est la bonne façon de la comprendre
En fait, je ne comprends pas très bien votre question, alors parcourons le code avec des idées
myFunction.bind(myObject) entre dans la fonction de liaison du prototype
Attribuez myFunction à fn, convertissez les paramètres en tableau args, supprimez le premier paramètre et attribuez-le à l'objet.
Renvoyer une fonction, puis penser aux fermetures, et alors vous comprendrez. Le travail effectué par cette fonction peut être simplement compris comme myFunction.apply(myObject,[... voici d'autres paramètres])
uneFonction()
C'est maFonction.apply(monObjet,[...il n'y a pas de paramètres ici])
Ensuite, entrez l'intérieur de maFonction, en raison de la relation entre appliquer, c'est monObjet, puis le travail est monObjet==monObjet
Retour vrai