代码片段一。
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()());
在上述代码中,不论是getNameFunc()还是它内部的function(),都是全局函数,并不只在object中执行,且由于JavaScript的声明提前(hoisting),所以执行时的this并不是object,而是外部的全局,所以输出"The Window"。
代码片段二。
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()());
上述代码关键在于var that = this; 在getNameFunc()中执行这句话,使得function()中的that变成了getNameFunc()所在的父函数(对象),因此当执行时,that对象为object。