代碼示例:
var fullname="A"
var obj= {
fullname:'B',
prop:{
fullname:'C',
getFullName:function () {
return this.fullname
}
}
};
console.log(obj.prop.getFullName());// C
var test=obj.prop.getFullName;
console.log(test());//A
解析:
this
所引用的是函數上下文,取決於函數是如何調用的,而不是怎麼被定義的;
第一個console.log()
,getFullname()
是作爲obj.prop
對象的函數被調用;
當getFullname()
被賦值給test
變量時,當前的上下文是全局對象window
,這是因爲test
被隱式地作爲全局對象的屬性;
call() 和 apply():
讓最後一個console.log()
打印輸出 C
console.log(test.call(obj.prop));
這就改變了this的指向!!!