4 回答

TA貢獻1898條經驗 獲得超8個贊
好吧,我唯一可以告訴你的是吸氣劑:
var foo = {
a: 5,
b: 6,
get c () {
return this.a + this.b;
}
};
foo.c; // 11
這是ECMAScript第5版規范引入的語法擴展,大多數現代瀏覽器(包括IE9)都支持該語法。

TA貢獻1772條經驗 獲得超6個贊
你可以這樣做:
var foo = {
a: 5,
b: 6,
init: function() {
this.c = this.a + this.b;
return this;
}
}.init();
這將是對象的某種一次初始化。
請注意,你實際上是分配的返回值init()來foo,所以你必須return this

TA貢獻1809條經驗 獲得超8個贊
缺少明顯的簡單答案,所以為了完整性:
但是,是有什么辦法對早些時候宣布的其他屬性在對象文本的屬性值依賴?
不會。這里的所有解決方案都會推遲到創建對象之后(以各種方式),然后分配第三個屬性。在最簡單的方法是只是這樣做:
var foo = {
a: 5,
b: 6
};
foo.c = foo.a + foo.b;
所有其他人只是更間接的方式來做同樣的事情。(Felix's特別聰明,但需要創建和銷毀臨時函數,增加復雜性;要么在對象上留下額外的屬性,要么[如果你的delete
屬性] 影響對該對象的后續屬性訪問的性能。)
如果你需要它在一個表達式中,你可以在沒有臨時屬性的情況下做到這一點:
var foo = function(o) {
o.c = o.a + o.b;
return o;
}({a: 5, b: 6});
或者當然,如果您需要多次執行此操作:
function buildFoo(a, b) {
var o = {a: a, b: b};
o.c = o.a + o.b;
return o;
}
然后你需要使用它:
var foo = buildFoo(5, 6);

TA貢獻1780條經驗 獲得超1個贊
只需實例化一個匿名函數:
var foo = new function () {
this.a = 5;
this.b = 6;
this.c = this.a + this.b;
};
添加回答
舉報