等高手解答网上的一道关于闭包的代码
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function () {
return function () {
return this.name;
};
}
};
alert(object.getNameFunc()()); //The Window
还是不明白为什么会返回 "The Window",
object.getNameFunc()返回的是最内层的函数,而内存函数也是指向object对象,所以this应该是“My Object”,不知道问题出在哪里。
------解决方案-------------------- var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function () {
var that = this
return function () {
return that.name;
};
}
};
alert(object.getNameFunc()()); //The Window
------解决方案--------------------分析每个执行环节
object.getNameFunc() 则 这个时候 getNameFunc中的this 是object
但是
var a = object.getNameFunc();
a();
这个时候a运行时候 没有关联对象 默认this === window
------解决方案--------------------因为object.getNameFunc()为 return function () {return this.name; };
这时候的this指的是window而不是 object 。
要想是My Object可以这样:
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function () {
var that = this
return function () {
return that.name;
};
}
&n