2010-08-02 70 views
1

可能重复:
Self-references in object literal declarations引用在{}对象创建其他属性

如何做到以下几点:

var object = { 
    alpha: 'one', 
    beta: **alpha's value** 
} 

不分割的对象创建成两部分?

+0

嗯..太臭了。我试图将枚举类型添加到我的对象,如var对象= {CURVETYPE:{DIRECT:0,ROAD:1},travel:this.CURVETYPE.DIRECT},但我可以看到这将毁掉我现在很好的命名空间。 .. – Nick 2010-08-02 21:53:14

回答

5

你不能,对象文字语法只是不支持这一点,你必须创建一个变量,第一然后用其来进行,就像这样:

var value = 'one'; 
var object = { 
    alpha: value, 
    beta: value 
}; 

或者......完全的东西不同,但在做beta时不能引用alpha,因为这两个属性都尚未创建,直到对象语句作为整体运行才可访问。

+0

..我得到“o未定义” – Nick 2010-08-02 21:54:16

+1

@BrunoLM - Nope:http://jsfiddle.net/nick_craver/Gnbjq/当你尝试使用它时,'o'是'undefined'。 – 2010-08-02 21:56:06

0

您无法通过{}创建对象。

7

你不能,如上所述。最相近的是:

var object = new (function() 
{ 
    this.alpha = 'one'; 
    this.beta = this.alpha; 
})(); 

这使用从匿名函数创建的单例实例。您也可以使用var声明专用字段。

0

另一个想法换一种方式来创建对象,而不会干扰任何新变量的作用域:

var lit = function(shared) { 
return { 
    alpha: shared.v1, 
    beta: shared.v2, 
    gamma: "three", 
    delta: shared.v1 

}; 
}(
{ 
    v1: "one", 
    v2: "two", 
} 
); 

一个你所不知道如何缩进语句....