Javascript 为什么这两种情况下引用的关键字不同?
第一代码Javascript 为什么这两种情况下引用的关键字不同?,javascript,Javascript,第一代码 var object1 = {name: "my object", ha: function() { return this; } } object1.ha() #=> Object {name: "my object", ha: function} 第二代码 var object2 = {name: "my object2",
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
因为object2中的
此
由于放置在匿名函数中而丢失了父对象的上下文,并且默认绑定到全局对象,在浏览器中,全局对象是窗口
您可以通过本地化对象引用来解决此问题:
var object2 = {
name : "my object2",
ha2 : function() {
var _this = this; // <-- here
return function() {
return _this;
}
}
}
var object2={
名称:“我的对象2”,
ha2:function(){
var_this=this;//因为object2中的this
由于被放置在匿名函数中而丢失了父对象的上下文,并且默认绑定到全局对象,在浏览器中,全局对象是窗口
您可以通过本地化对象引用来解决此问题:
var object2 = {
name : "my object2",
ha2 : function() {
var _this = this; // <-- here
return function() {
return _this;
}
}
}
var object2={
名称:“我的对象2”,
ha2:function(){
var _this=this;//因为this
不是一个变量,它是一个关键字,其值在运行时被解析。它解析为创建其作用域的最近绑定对象。当您使用静态解析的其他语言时,这会使您感到困惑。在您的示例中,最近绑定对象是运行函数时的窗口。 因为此
不是一个变量,它是一个关键字,其值在运行时解析。它解析为创建其作用域的最近绑定对象。当您使用静态解析的其他语言时,这会令人困惑。在您的示例中,最近绑定对象是运行函数时的窗口