2012-09-14 44 views
0

可能重複內:
Self-references in object literal declarations
Can you call data from it's own json object?訪問當前對象從它自己

我創建這樣一個對象:

var lines = { 
    all: [ /* Array */ ], 
    current: this.all[1] 
} 

然而current: this.all[1]回報undefined。我清楚地知道,我可以創建current屬性是這樣的:

var lines = { 
    all: [ /* Array */ ] 
} 
lines.current = lines.all[1]; 

但我認爲這是相當混亂,創建需要引用自己的對象的多個屬性時尤其如此。

我同時使用

  • current: this.all[1](返回undefined)和
  • current: lines.all[1](說lines不存在)

我怎麼可以參考我的對象的屬性嘗試米目前「在」?例如,在我的第一個示例中,lines.current將被分配來自lines.all的第二個元素。

+0

相關:http://stackoverflow.com/questions/8172111/can-i-alias-a-key-in-an-object-literal/8172171#8172171 – zzzzBov

回答

3

只是有一個其他的解決辦法比你貼一個:

var lines = new function() { 
    this.all = [ /* Array */ ]; 
    this.current = this.all[1]; 
}; 
+0

我希望會有一個「更清潔「的解決方案,但我想沒有。我可以使用getter函數,但這更加混亂,並且不能很好地用'console.log()'進行調試。 – Bojangles

+0

我覺得這個問題稍微有點不同,因爲在這種情況下,行比OOP更接近類,而不是對象 –

+0

@Parv我真的不太感到困擾;這個解決方案返回一個我很擔心的對象。 – Bojangles

0

,因爲當前很可能只是一個getter
你應該按照一些約定將名稱更改爲getCurrent()作爲數組中的頂級元素可能會更改
並將您的代碼更改爲這樣的內容。

var lines = { 
    all: [ /* Array */ ], 
    getCurrent: function(){return this.all[1];} 
} 
+0

這是一個很好的解決方案,它將所有內容都保存在對象中,但是它不能用'console.log()'調試,所以我決定使用'new function()'來代替。 – Bojangles