我正在尝试做这样的事情:
var obj = {
    a: 5,
    b: this.a + 1
}
(而不是 5 有一个函数,我不想执行两次返回一个数字)
我可以重写它以便obj.b稍后从分配obj.a,但是我可以在声明期间立即进行分配吗?
我正在尝试做这样的事情:
var obj = {
    a: 5,
    b: this.a + 1
}
(而不是 5 有一个函数,我不想执行两次返回一个数字)
我可以重写它以便obj.b稍后从分配obj.a,但是我可以在声明期间立即进行分配吗?
不,this在 JavaScript 中并不像你想象的那样工作。this在这种情况下是指全局对象。
只有 3 种情况下this会设置该值:
功能案例
foo();
这里this将引用全局对象。
方法案例
test.foo(); 
在这个例子this中将参考test.
构造函数案例
new foo(); 
以new关键字开头的函数调用充当构造函数。在函数内部this将引用一个新创建的Object.
其他地方,this指的是全局对象。
有几种方法可以做到这一点;这就是我会使用的:
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
这应该返回正确的值:
function () {
   var aVar = 5;
   var bVar = aVar + 1;
return {
    a : aVar,
    b : bVar;  
}
}();
事实证明,除非第一个对象是函数,否则您不能在另一个对象中引用一个对象。但是你可以这样做。
    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
     } 
通过这种方式,您可以为代码的其余部分保留对象字面量结构
不,在您的示例中,的值this不是指对象文字。
您需要b在创建对象后为其分配一个值,以便基于obj.