我正在尝试做这样的事情:
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
.