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
不是一个变量,它是一个关键字,其值在运行时被解析。它解析为创建其作用域的最近绑定对象。当您使用静态解析的其他语言时,这会使您感到困惑。在您的示例中,最近绑定对象是运行函数时的窗口。

因为
不是一个变量,它是一个关键字,其值在运行时解析。它解析为创建其作用域的最近绑定对象。当您使用静态解析的其他语言时,这会令人困惑。在您的示例中,最近绑定对象是运行函数时的窗口