第一个代码
var object1 = {name: "my object",
ha: function() {
return this;
}
}
object1.ha() #=> Object {name: "my object", ha: function}
第二个代码
var object2 = {name: "my object2",
ha2: function() {
return function() {
return this;
}
}
}
object2.ha()() #=> window
答案 0 :(得分:4)
因为object2中的this
通过放置在匿名函数中而丢失了父对象的上下文,并且默认绑定到全局对象,在浏览器中,该对象是window
。
您可以通过本地化对象引用来补救它:
var object2 = {
name : "my object2",
ha2 : function() {
var _this = this; // <-- here
return function() {
return _this;
}
}
}
答案 1 :(得分:1)
因为this
不是变量,所以它是一个在运行时解析其值的关键字。它解析为最近的绑定对象,创建其范围。当您习惯于静态解析此语言的其他语言时,这会令人困惑。在您的示例中,运行函数时最近的绑定对象是窗口。