对象文本/初始值设定项中的自引用

2022-08-29 22:16:07

有没有办法让像下面这样的东西在JavaScript中工作?

var foo = {
    a: 5,
    b: 6,
    c: this.a + this.b  // Doesn't work
};

在当前表单中,此代码显然会引发引用错误,因为该错误不引用 。但是,有没有办法让对象文本属性中的值依赖于之前声明的其他属性?thisfoo


答案 1

好吧,我唯一能告诉你的是getter

var foo = {
  a: 5,
  b: 6,
  get c() {
    return this.a + this.b;
  }
}

console.log(foo.c) // 11

这是 ECMAScript 第 5 版规范引入的语法扩展,大多数现代浏览器(包括 IE9)都支持该语法。


答案 2

你可以做这样的事情:

var foo = {
   a: 5,
   b: 6,
   init: function() {
       this.c = this.a + this.b;
       return this;
   }
}.init();

这将是对象的某种一次性初始化。

请注意,您实际上是将返回值赋值给 ,因此您必须这样做。init()fooreturn this