代码示例:
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的指向!!!