Heim  >  Fragen und Antworten  >  Hauptteil

Javascript – dieses Zeigeproblem in der Prototyp-Methode der JS-Erweiterung

Im Buch JavaScript Ninja Secrets gibt es eine Prototypenbibliothek und ein Beispiel für Funktionsbindungscode:

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();

Ich verwende Haltepunkte, um die Funktion zu überprüfen. bind里面的fn指向myFunction这个函数 这个我不太理解 我的理解是只要用Function.prototype 这个原型扩展的方法 此方法里面开始声明的变量var fn=this;fn的指向就指向使用这个方法的函数 就像本例中的myFunction.bind(myObject);调用bin方法,fn指向myFunction Bei dieser Funktion weiß ich nicht, ob dies der richtige Weg ist, sie zu verstehen.

漂亮男人漂亮男人2733 Tage vor749

Antworte allen(1)Ich werde antworten

  • 迷茫

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

    其实不太能懂你的提问,那咱就来用思路走一遍这个代码吧

    myFunction.bind(myObject)进入到原型得bind函数内部

    1. 将myFunction赋值给fn,将参数转化成一个数组args,将第一个参数删除并赋值给object。

    2. 返回一个函数,然后你思考下闭包这回事,然后就了解。这个函数干的活可以简单得理解为myFunction.apply(myObject,[...这里是其他参数])

    aFunction()

    就是myFunction.apply(myObject,[...这里木有参数])
    然后进入到myFunction内部,因为apply的关系this就是myObject,然后干的活就是myObject==myObject
    返回true

    Antwort
    0
  • StornierenAntwort