【问题标题】:Accessing the containing object of a function by name in javascript在javascript中按名称访问函数的包含对象
【发布时间】:2015-08-06 09:33:30
【问题描述】:

我想知道是否有人可以评论(引用)以下内容是否正确或在某些时候会失败?

var myObj = {  
    x: 10,
    getX: function getX() {
        return myObj.x;
    }
}

我相信这是返回 x 的更好方法,但是我的一位同事更喜欢绑定到 this.x 并使用它。

var myObj = {  
    x: 10,
    getX: function getX() {
        var thisObj = this;
        return thisObj.x;
    }
}

我找不到任何支持我的具体例子(也许是因为我错了?)。

【问题讨论】:

    标签: javascript closures this


    【解决方案1】:

    我认为第二种解决方案更好。

    考虑一下:

    var myObj = {  
      x: 10,
      getX: function getX() {
        return myObj.x;
      }
    }
    
    var anotherObj = myObj;
    
    myObj.getX();      // return myObj.x
    anotherObj.getX(); // ERROR, never return anotherObj.x
    

    但如果你改用this,你就不会有问题了。

    var myObj = {
        x: 10,
        getX: function() { // you may not need the function name
            return this.x;
        }
    };
    
    var anotherObj = myObj;
    
    console.log(myObj.getX());      // return myObj.x
    console.log(anotherObj.getX()); // return anotherObj.x

    【讨论】:

    • 感谢您的回答,我确实发现这种方法存在问题,其中将函数作为参数传递绑定到窗口,因为它已通过使用 bind 或 apply 解决,但需要注意
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2011-10-07
    • 2012-04-20
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    相关资源
    最近更新 更多