window.val = 1;
var json = {
val:10,
dbl:function(){
this.val = 2;
}
};
json.dbl();//this.val = 2 ⒈
var dbl = json.dbl; ⒉
dbl();//window.val = 1; ⒊
json.dbl.call(window);//this指向变为window,并且执行,window.val = 1; ⒋
alert(window.val + json.val);//json指向为window,所以val为1,1+1=2??? ⒌
註解是我最開始的理解,然後看到了結果之後我試圖用答案去逆向思考來找原因。
==========================看過答案之後的分割線============== ============
在第⒈步之後,this仍然是dbl的,此時val為2,,到了⒉ ⒊之後,此時是直接調用的window.val = 1,然後再call改變this指向並執行,此時的this指向window,並且直接覆蓋了window下的val屬性,所以window.val為2,最後⒋步就變為了2 2=4。
不知道這樣的想法對不對,還請指教,謝謝!
仅有的幸福2017-05-19 10:43:46
json.dbl();//this.val = 2 ⒈
var dbl = json.dbl; ⒉
dbl();//window.val = 2; ⒊
alert(window.val + json.val);//2+2 4
dbl() 執行的時候,此時this 就是 window 對象,window.val = 2, 你的第四部是沒有必要的