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

时间:2016-02-26 10:40:19

标签: javascript node.js syntax v8 spidermonkey

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

在NodeJS中执行此操作会在条^处产生一个SyntaxError(在第3行 - 正如预期的那样。

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

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

为什么浏览器引擎支持这种语法?是否有关于此行为的文档?

1 个答案:

答案 0 :(得分:1)

正如jcubic所指出的,ES6语法就是答案。 具体来说, Object Literal Extensions

以下是来自Kyle Simpson的精彩YDKJS series的摘录。

  

对象文字扩展程序source

     

ES6为简陋的{ .. }对象文字添加了许多重要的便利扩展。

     

简明属性

     

您当然熟悉以这种形式声明对象文字:

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

如果说x:x全部都是多余的话,那总是觉得多余,那就是好消息。   如果需要定义与词法同名的属性   标识符,您可以将它从x:x缩短为x。考虑:

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

简明方法source

     

与我们刚刚检查的简洁属性的类似精神,功能   附加到对象文字中的属性也有一个简洁的形式,   为方便起见。

     

旧方式:

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

从ES6开始:

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