对象文字/初始化器中的自引用

有没有办法在JavaScript中使用以下内容?


var foo = {

    a: 5,

    b: 6,

    c: this.a + this.b  // Doesn't work

};

在当前形式中,此代码显然会抛出引用错误,因为this没有引用foo。但是,是有什么办法对早些时候宣布的其他属性在对象文本的属性值依赖?

对象文字/初始化器中的自引用


噜噜哒
浏览 629回答 4
4回答

汪汪一只猫

好吧,我唯一可以告诉你的是吸气剂:var foo = {  a: 5,  b: 6,  get c () {    return this.a + this.b;  }};foo.c; // 11这是ECMAScript第5版规范引入的语法扩展,大多数现代浏览器(包括IE9)都支持该语法。

梦里花落0921

你可以这样做:var foo = {   a: 5,   b: 6,   init: function() {       this.c = this.a + this.b;       return this;   }}.init();这将是对象的某种一次初始化。请注意,你实际上是分配的返回值init()来foo,所以你必须return this

海绵宝宝撒

缺少明显的简单答案,所以为了完整性:但是,是有什么办法对早些时候宣布的其他属性在对象文本的属性值依赖?不会。这里的所有解决方案都会推迟到创建对象之后(以各种方式),然后分配第三个属性。在最简单的方法是只是这样做: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);

慕神8447489

只需实例化一个匿名函数:var foo = new function () {    this.a = 5;    this.b = 6;    this.c = this.a + this.b;};
打开App,查看更多内容
随时随地看视频慕课网APP