var fullname = 'John Doe';
var obj = {
fullname: 'Colin Ihrig',
prop: {
fullname: 'Aurelio De Rosa',
getFullname: function() {
return this.fullname;
}
}
};
console.log(obj.prop.getFullname()); // Aurelio De Rosa
var test = obj.prop.getFullname;
console.log(test()); // John Doe
上面的代码打印结果依次为Aurelio De Rosa和John Doe。 原因在于this指向的是函数的执行环境,this取决于其被谁调用了,而不是被谁定义了。
console.log(test.call(obj));// Colin Ihrig
可以使用call()或者apply()强制切换执行环境.切换到obj环境。