首頁  >  問答  >  主體

javascript - js擴展原型方法裡 this指向問題

JavaScript忍者秘籍這本書中 有一段Prototype函式庫,函數bind程式碼的範例:

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

我用斷點看函數bind裡面的fn指向myFunction這個函數這個我不太懂我的理解是只要用Function.prototype 這個原型擴充的方法此方法裡面開始宣告的變數var fn=this;fn#的指向就指向使用這個方法的函數就像本例中的myFunction. bind(myObject);呼叫bin方法,fn指向myFunction這個函數不知道這樣理解對不對

漂亮男人漂亮男人2733 天前747

全部回覆(1)我來回復

  • 迷茫

    迷茫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

    回覆
    0
  • 取消回覆