javascript - ce problème de pointage dans la méthode du prototype d'extension js
漂亮男人
漂亮男人 2017-05-19 10:36:17
0
1
672

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指向myFunctionCette fonction, je ne sais pas si c'est la bonne façon de la comprendre

漂亮男人
漂亮男人

répondre à tous (1)
迷茫

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

  1. Attribuez myFunction à fn, convertissez les paramètres en tableau args, supprimez le premier paramètre et attribuez-le à l'objet.

  2. 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

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!