我可以在JavaScript中的对象声明期间引用其他属性吗?

我正在尝试做这样的事情:

var obj = { a: 5, b: this.a + 1 } 

(而不是5有一个函数,我不想执行两次返回一个数字)

我可以改写它来从obj.a分配obj.b ,但是我可以在声明中立即执行吗?

不,在JavaScript中不会像你想的那样工作。 在这种情况下,这是指全局对象。

只有3个这样的值被设置:

function案例

 foo(); 

这里将引用全局对象。

方法案例

 test.foo(); 

在这个例子中, this将涉及到test

构造函数的情况

 new foo(); 

new关键字开头的函数调用作为构造函数。 在函数内部, this将引用一个新创build的Object

在其他地方, this是指全球性的对象。

有几种方法可以做到这一点; 这是我会用的:

 function Obj() { this.a = 5; this.b = this.a + 1; // return this; // commented out because this happens automatically } var o = new Obj(); ob; // === 6 

这应该返回正确的值:

 function () { var aVar = 5; var bVar = aVar + 1; return { a : aVar, b : bVar; } }(); 

不,在你的例子中,这个值并不是指对象字面值。

在创build对象之后,您需要为b赋值,以便将其基于obj另一个属性。

不, this将会和定义之外的意义相同。

事实certificate,除非第一个对象是函数,否则不能引用另一个对象内的对象。 但是你可以这样做。

  var obj = { a: 5 } obj.b = obj.a + 1; // create field b in runtime and assign it's value 

如果你console.log(OBJ),你会有

  obj = { a: 5, b: 6 } 

这样你就保留了代码剩余部分的对象字面结构

在铬debugging器

 > var o = {a: 5, b: this.a+1} undefined > ob NaN > oa 5