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

ser*_*erg 39 javascript

我想做这样的事情:

var obj = {
    a: 5,
    b: this.a + 1
}
Run Code Online (Sandbox Code Playgroud)

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

我可以重写它以便obj.b稍后分配obj.a,但是我可以在声明期间立即执行吗?

Ivo*_*zel 32

thisJavaScript中的编号不会像您认为的那样工作.this在这种情况下,指的是全局对象.

只有3种情况this设置了值:

功能案例

foo();
Run Code Online (Sandbox Code Playgroud)

这里this将引用全局对象.

方法案例

test.foo(); 
Run Code Online (Sandbox Code Playgroud)

在这个例子this中将参考test.

构造函数案例

new foo(); 
Run Code Online (Sandbox Code Playgroud)

new关键字开头的函数调用充当构造函数.函数内部this将引用新创建的Object.

其他地方,this指的是全局对象.


ken*_*ken 10

有几种方法可以实现这一目标; 这是我会用的:

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

var o = new Obj();
o.b; // === 6
Run Code Online (Sandbox Code Playgroud)


kem*_*002 6

这应该返回正确的值:

function () {
   var aVar = 5;
   var bVar = aVar + 1;

return {
    a : aVar,
    b : bVar;  
}
}();
Run Code Online (Sandbox Code Playgroud)


Her*_*ini 5

事实证明,除非第一个是函数,否则您不能在另一个对象中引用一个对象。但是你可以这样做。

    var obj = {
        a: 5
    }

    obj.b = obj.a + 1; // create field b in runtime and assign it's value
Run Code Online (Sandbox Code Playgroud)

如果你 console.log(obj) 你会有

   obj = {
        a: 5,
        b: 6
     } 
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以为代码的其余部分保留对象字面量结构