Maison  >  Questions et réponses  >  le corps du texte

javascript - ce problème de pointage dans la méthode du prototype d'extension js

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

漂亮男人漂亮男人2729 Il y a quelques jours743

répondre à tous(1)je répondrai

  • 迷茫

    迷茫2017-05-19 10:38:17

    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

    répondre
    0
  • Annulerrépondre