全局中指向windowjavascript
函數預編譯過程時指向windowjava
call apply改變this指向(在上一篇博客中詳細說起了他們兩個的做用今天就不包含在實際案例之中)app
對象調用方法this的指向函數
var name= "222";
var a = {
name : "111",
say : function() {
console.log(this.name);
}
}
var fun = a.say;
fun();
a.say();
var b = {
name : "333",
say : function(fun){
fun();
}
}
b.say(a.say);
b.say = a.say;
b.say();
複製代碼
按照以前所總結的答案很顯然22二、1十一、22二、333。ui
很差理解的點可能在於b.say(a.say),這句語句至關於實現了把a中的方法放到b的say方法中調用,注意調用二字,b中say方法執行時只是在全局中執行了fun函數,而不是說b對象運行了fun函數中的代碼。因此結果是222。this
構造函數與函數this指向區別咱們來看個案例spa
var a = 5;
function test() {
console.log(a);
a = 0;
console.log(this.a);
var a;
console.log(a);
}
console.log(test()); // undefined、五、0
console.log(new test()) // undefined、undefined、0
複製代碼
這邊又再次複習了一下與預編譯的實現實現1時,函數中預編譯環節this指向window因此輸出5 執行2時,以前說起過構造函數生成對象時函數中會生成一個空的this對象(構造函數那篇有詳細說明),那麼這一次函數中this指向的是函數中的那個空this因此返回undefined。code
ending...對象