{ abcFunc(arg1, arg2){ /*FuncBody*/ } } 是新的对象方法语法吗?

aeX*_*264 6 javascript object

当我阅读 MDN 文档时,我得到了以下对象语法,

var o = {
  a: 7,
  get b() { 
    return this.a + 1;
  },
  set c(x) {
    this.a = x / 2;
  }
};

// ...
Run Code Online (Sandbox Code Playgroud)

从这里。起初我以为,它只适用于get& set。但后来我看到了这个,

// ...

const handler = {
  getPrototypeOf(target) {
    return monsterPrototype;
  }
};

// ...
Run Code Online (Sandbox Code Playgroud)

从这里。当我使用自定义函数进行测试时,它起作用了。这里,

let obj = {
  _sum: 0,
  sum(a, b) {
    return this._sum += (a + b);
  }
}

console.log(obj.sum(2, 3));    // int 5
console.log(obj.sum(7, 3));    // int 15
console.log(obj.sum(25, 75));  // int 115
Run Code Online (Sandbox Code Playgroud)

它也可以像这样使用表达式!!

let obj = {
  _sum: 0,
  ['su' + 'm'](a, b) {
    return this._sum += (a + b);
  }
}

console.log(obj.sum(2, 3));    // int 5
console.log(obj.sum(7, 3));    // int 15
console.log(obj.sum(25, 75));  // int 115
Run Code Online (Sandbox Code Playgroud)

我搜索了 MDN,搜索了新的对象方法语法,但仍然找不到这种语法。所以,我只想知道它是我可以使用的标准语法还是实验技术。我正在使用Chome v79。

Nic*_*ons 2

您正在使用 ES6 中引入的两种类型的语法。第一个称为“速记方法名称”,另一个称为计算属性名称。因此,它们不被视为实验性技术,并且自 2015 年以来一直是标准的一部分。您可以在规范的第 14.3节中找到简写方法名称的语法,以及在第12.2.6节中找到计算属性名称。

简写方法名称允许您省略function关键字,以便将方法的名称用作属性名称:

在 ECMAScript 2015 中,提供了简写符号,因此不再需要关键字“function”。

最后一个代码块结合了简写方法名称和计算属性名称,以在运行时创建方法名称sum。计算属性名称允许您将属性作为表达式添加到对象文字,这意味着它不仅必须用于对象方法,还可以用于标准对象文字属性:

const obj = {
  ["k" + "ey"]: 1
}
console.log(obj.key); // 1
Run Code Online (Sandbox Code Playgroud)

您可以在大多数现代浏览器中使用速记方法名称和计算属性名称,但是,Internet Explorer 目前不支持这两种语法。

您可以在此处阅读有关对象中方法定义的更多信息