Javascript 对象中的命名函数?为什么这行得通?

Named function inside a Javascript object? Why does this work?

我在写一些代码时偶然发现了这个:

var obj = {
  myFunc() {
    document.body.innerHTML = 'Hello World!';
  }
};

obj.myFunc();

我想输入的是:

var obj = {
  myFunc: function() { 
    // ...
  }
};

我没有注意到我不小心输入了第一个,直到我意识到我的代码不是 运行 在 IE11 中。

为什么第一个示例在 Chrome/Firefox 而不是 IE11 中工作?

此外,如果这是官方语言功能,这叫什么

这是一个 Enhanced Object Literal, which is es6 syntax. More formally, Object Initializers allow Method Definitions 而不是像以前的版本那样只有 key/value 对。

This table 讲述了 'object literal extensions' 下的兼容性故事。简短的回答是 IE11 尚未实现该功能。