2016-12-15 46 views
20

我进入了Firefox和Chrome浏览器开发控制台这个表达式,我不知道为什么它是有效的JavaScript:对象声明中的属性名称后面没有冒号,它有效吗?

var x = { a (b) {} }; 
console.log(x); 

x然后设置为与财产被称为“一”与“一”包含一个函数的对象参数标识符“b”。 这个有效的JavaScript语法如何? “a”之后冒号缺少,我不理解函数定义。

+5

ES6简短对象符号 – vlaz

+1

'x'是一个名为'a'的函数,它的参数名为'b' –

回答

30

这是ES6/ES2015语法糖(Property shorthand)。 随着ES6:

const obj = { 
    a(b) { 
     // Shorthand method 
     // `this` context is `obj` 
    }, 
    c 
}; 

等于

var obj = { 
    a: function a(b) { 

    }, 
    c: c 
}; 
+1

我将其命名为一个简写方法(因为当你调用这个属性时,它的函数会得到'这个上下文作为'obj',但)。 – Hydro

+1

是否是OP案例,但通常情况下,您不能使用分号作为任何属性,所以我宁愿不重命名它(尽管我会添加注释)。感谢您编辑顺便说一句! – nicovank

+0

请注意有一个微妙的区别。在你的第一个片段中,'obj.a'不是一个构造函数。在第二个片段中,'new obj.a'像往常一样工作。 –

5

在JavaScript中,当你写:

var x = { a (b) {} }; 

它会认为它是:

var x = { 
    a: function (b) { 

    } 
    } 

例如,你可以检查这个它会清除您的疑问:

var x = { a (b) { console.info('function called') } }; 
x.a(); 

这将调用分配给对象x财产a功能。

相关问题