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;
};
添加回答
举报