javascript - js擴展原型方法裡 this指向問題
漂亮男人
漂亮男人 2017-05-19 10:36:17
0
1
777

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這個函數不知道這樣理解對不對

漂亮男人
漂亮男人

全部回覆(1)
迷茫

其實不太能懂你的提問,那咱就來用思路走一遍這個代碼吧

myFunction.bind(myObject)進入到原型得bind函數內部

  1. 將myFunction賦值給fn,將參數轉換成一個陣列args,將第一個參數刪除並賦值給object。

  2. 回傳一個函數,然後你思考下閉包這回事,然後就了解。這個函數幹的活可以簡單得理解為myFunction.apply(myObject,[...這裡是其他參數])

aFunction()

就是myFunction.apply(myObject,[...這裡木有參數])
然後進入到myFunction內部,因為apply的關係this就是myObject,然後幹的活就是myObject==myObject
回傳true

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板