2011-01-06 65 views
32

我试图做这样的事情:我可以在JavaScript中的对象声明期间引用其他属性吗?

var obj = { 
    a: 5, 
    b: this.a + 1 
} 

(而不是5还有就是我不想执行返回数的两倍的函数)

我可以把它改写分配obj.b以后从obj.a,但是我可以在申报过程中马上做吗?

+2

你尝试它的其余部分?!? – ken 2011-01-06 18:50:09

+0

@ken`this.a` is undefined – serg 2011-01-06 18:51:03

回答

27

在JavaScript中的this不工作,就像你认为它那样工作。本例中的this是指全局对象。

只有3例,其中值this被设置:

的功能的情况下

foo(); 

这里this将参照全球对象。

的方法案例

test.foo(); 

在这个例子中this将参考test

的构造案例

new foo(); 

这年代由new关键字作为一个构造函数之前函数调用。功能this内部将参考新创建的 Object

其他地方,this引用全局对象。

4

这将返回正确的值:

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

return { 
    a : aVar, 
    b : bVar; 
} 
}(); 
2

没有,在你的例子中,this值不参照对象文本。

在创建对象之后,您需要为b赋值,以便将其基于obj中的另一个属性。

1

this将采用与定义之外相同的含义。

0
铬调试

> var o = {a: 5, b: this.a+1} 
undefined 
> o.b 
NaN 
> o.a 
5 
6

有几种方法可以做到这一点;这是我会用的:

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 
2

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

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 
    } 

这样你保留该对象的文字结构的代码

相关问题