为什么浏览器支持对象的隐式函数属性

var obj = { foo: function() { return "this is foo"; }, bar() { return "this is bar"; } } 

在NodeJS中执行此操作会导致在第3行处出现SyntaxError(在预期的第3行)。

尽pipeChrome和Firefox看起来非常开心,但似乎显然是错误的:

 console.log(obj.foo()); // "this is foo" console.log(obj.bar()); // "this is bar" 

为什么浏览器引擎支持这种语法? 有这种行为的文件?

正如jcubic指出的那样,ES6语法就是答案。 具体而言, 对象文字扩展

这是凯尔辛普森的伟大的YDKJS系列片段。

对象文字扩展名 ( 来源 )

ES6为卑微的{ .. }对象文字增加了许多重要的便利扩展。

简洁的属性

你当然熟悉以这种forms声明对象文字:

 var x = 2, y = 3, o = { x: x, y: y }; 

如果说x:x总是觉得多余,那么这里有个好消息。 如果您需要定义与词法标识符名称相同的属性,可以将其从x:x缩短为x。 考虑:

 var x = 2, y = 3, o = { x, y }; 

简明的方法 ( 来源 )

与我们刚刚研究的简洁属性类似的精神,为了方便起见,附在属性中的函数也具有简洁的forms。

旧的方式:

 var o = { x: function(){ // .. }, y: function(){ // .. } } 

而从ES6开始:

 var o = { x() { // .. }, y() { // .. } }