这个对象方法的定义是如何在没有"function"关键字的情况下工作的?

32
我意外地发现,当我省略 function 关键字时也能正常运行。通常,在下面的模块中,foobar 方法的声明应该是 foobar: function(arg1),但有趣的是以下代码在某些浏览器(例如Chrome版本44.0.2403.157 m)中可以工作,但在IE 11.0.9600.17959中失败了。
这在任何浏览器中都可能运行,这是一些新的ES6功能吗?
var module = {
    foobar(arg1) {
        alert(arg1);
    }
};

module.foobar("Hello World");
2个回答

32

这个代码怎么可能在任何浏览器上运行?是一些新的ES6功能吗?

是的

...

Method definitions

A property of an object can also refer to a function or a getter or setter method.

var o = {
  property: function ([parameters]) {},
  get property() {},
  set property(value) {},
};

In ECMAScript 6, a shorthand notation is available, so that the keyword "function" is no longer necessary.

// Shorthand method names (ES6)
var o = {
  property([parameters]) {},
  get property() {},
  set property(value) {},
  * generator() {}
};

...


正如你所看到的,在第一种情况下 new o.preperty() 表现正常。使用缩写方法名称,new o.property() 会抛出一个错误。请参见 这里 - nicovank

14

ES6允许"简洁方法",但正如您发现的那样,这种方法目前还不兼容所有浏览器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接