4 回答

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

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

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

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
只需實(shí)例化一個(gè)匿名函數(shù):
var foo = new function () {
this.a = 5;
this.b = 6;
this.c = this.a + this.b;
};
添加回答
舉報(bào)