如何在同一对象中的匿名函数中引用对象属性?

时间:2012-04-02 02:21:26

标签: javascript javascript-objects

var foo = {
  x: 1,
  y: (function () {
     return ++this.x;
  })()
};
console.log(foo.y); // undefined rather than 2

让我们说我希望能够在不使用foo.y()的情况下引用foo.y。这可能吗?

以上显然不起作用,我假设这是因为闭包引用了另一个 this

5 个答案:

答案 0 :(得分:6)

如果你想将y作为属性而不是函数访问,并让它返回foo.x的当前值,我能想到的唯一方法就是使用getter / setter,这是ES5规范的一部分,并且在大多数现代浏览器中采用(但如果你支持旧版浏览器,则不可用)。

var foo = {
    x: 1,
    get y() {
        return this.x;
    }
};

答案 1 :(得分:2)

您不将y声明为函数,而是作为函数调用的结果。它应该是:

var foo = {
  x: 1,
  y: function () {
     return this.x;
  }
};  

或者,如果您只想分配x的值:

 var foo = {
    x: 1,
    y: this.x
 };   

更新:无法生成x的同义词。声明y时,它可以是值或函数。它不能是对另一个值的引用。

答案 2 :(得分:1)

如果你不想使用y()作为函数,为什么不直接返回x?你返回一个函数的唯一原因是你实际上需要修改x的结果。

var foo = {
     x: 1,
     y: (function () {
          return this.x;
     })()}; 
console.log(foo.x); // 1

答案 3 :(得分:0)

foo.y不是一个功能。 foo.y定义为foo.x

答案 4 :(得分:0)

var foo = new Object();
foo.x = 1;
foo.y = function() { return this.x; };
console.log(foo.y());

或者如果您在定义foo时尝试调用y

var foo = new Object();
foo.x = 1;
foo.y = x;
console.log(foo.y);