我试图做这样的事情:我可以在JavaScript中的对象声明期间引用其他属性吗?
var obj = {
a: 5,
b: this.a + 1
}
(而不是5还有就是我不想执行返回数的两倍的函数)
我可以把它改写分配obj.b
以后从obj.a
,但是我可以在申报过程中马上做吗?
我试图做这样的事情:我可以在JavaScript中的对象声明期间引用其他属性吗?
var obj = {
a: 5,
b: this.a + 1
}
(而不是5还有就是我不想执行返回数的两倍的函数)
我可以把它改写分配obj.b
以后从obj.a
,但是我可以在申报过程中马上做吗?
在JavaScript中的this
不工作,就像你认为它那样工作。本例中的this
是指全局对象。
只有3例,其中值this
被设置:
的功能的情况下
foo();
这里this
将参照全球对象。
的方法案例
test.foo();
在这个例子中this
将参考test
。
的构造案例
new foo();
这年代由new
关键字作为一个构造函数之前函数调用。功能this
内部将参考新创建的 Object
。
其他地方,this
引用全局对象。
这将返回正确的值:
function() {
var aVar = 5;
var bVar = aVar + 1;
return {
a : aVar,
b : bVar;
}
}();
没有,在你的例子中,this
值不参照对象文本。
在创建对象之后,您需要为b
赋值,以便将其基于obj
中的另一个属性。
第this
将采用与定义之外相同的含义。
> var o = {a: 5, b: this.a+1}
undefined
> o.b
NaN
> o.a
5
有几种方法可以做到这一点;这是我会用的:
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
事实证明,除非第一个对象是函数,否则不能在另一个对象内引用对象。但你可以这样做。
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
}
这样你保留该对象的文字结构的代码
你尝试它的其余部分?!? – ken 2011-01-06 18:50:09
@ken`this.a` is undefined – serg 2011-01-06 18:51:03