我可以在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