2010-08-02 42 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", 
} 
); 

一個你所不知道如何縮進語句....