2011-11-07 117 views
1

對不起,對於這樣一個隨機標題,但不知道如何更好地解釋它。因此,不知道這是否是重複的問題。當前對象屬性作爲同一對象不同屬性中的值

所以,宣告一個新的對象的時候,我在找計算giga值:

var myObject = { 
    super : 1, 
    mega : 5, 
    uber : 100, 
    giga : this.super + this.mega + this.uber // super + mega + uber doesn't cut it either.. 
}; 

但是,這並不工作,所以,這樣做同時聲明,或不可能的任何方式?

希望我已經提前明確表示感謝!

+1

可能[對象字面聲明中的自引用]的副本(http://stackoverflow.com/questions/4616202/self-references-in-object-literal-declarations) –

回答

6

在Javascript中1.5你可以使用get關鍵字來定義一個getter

var obj = { 
    super : 1, 
    mega : 5, 
    uber : 100, 
    get giga() { 
     return this.super + this.mega + this.uber; 
    } 
}; 

alert(obj.giga) // 106 

更多關於這個http://robertnyman.com/2009/05/28/getters-and-setters-with-javascript-code-samples-and-demos/

+1

這將完全落在非ES5瀏覽器上。請使用'Object.defineProperty'來定義getter/setters – Raynos

+0

沒有說明我是否對ES5或ES4或ESx感興趣,我沒有看到downvote的理由。事實上,這是迄今爲止最清潔的答案。例如: – jolt

+0

@Tom:但在IE8中不起作用。 –

4

我認爲你有一個很好的理由需要這樣做內聯,否則這種欺騙並不是一個好主意。

這裏是我想出了:

var myObject = (function(){ 
    this.giga = this.super + this.mega + this.uber; 
    return this; 
}).call({ 
    super : 1, 
    mega : 5, 
    uber : 100 
}); 
0
var myObject = { 
    super : 1, 
    mega : 5, 
    uber : 100 
}; 
myObject.giga = myObject.super + myObject.mega + myObject.uber; 
+0

有一個尾隨逗號,我在複製時使用它:P – Esailija

+0

@Esailija爲什麼我複製粘貼失敗? – Raynos

+0

我不明白這個問題。我的意思是我和你有同樣的錯誤,因爲我拷貝了OP的消息,所以我認爲你也這麼做了。 – Esailija

相關問題