在对象声明中属性名后没有冒号,它有效吗?

Lac*_*uno 21 javascript

我在Firefox和Chrome Dev Console中输入了这个表达式,我想知道为什么它是有效的JavaScript:

var x = { a (b) {} };
console.log(x);
Run Code Online (Sandbox Code Playgroud)

x然后将其设置为具有属性"a"的对象,该属性包含具有参数标识符"b"的名为"a"的函数.这个有效的JavaScript语法怎么样?"a"后冒号丢失,我不理解函数定义.

nic*_*ank 34

这是ES6/ES2015的合成糖(属性简写).使用ES6:

const obj = {
    a(b) { 
        // Shorthand method
        // `this` context is `obj`
    },
    c
};
Run Code Online (Sandbox Code Playgroud)

等于

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

    },
    c: c
};
Run Code Online (Sandbox Code Playgroud)


Man*_*dhi 5

在JavaScript中,当你写:

var x = { a (b) {} };
Run Code Online (Sandbox Code Playgroud)

它会将其视为:

var x = { 
    a: function (b) {

     }
   }
Run Code Online (Sandbox Code Playgroud)

例如,您可以检查这一点,它将清除您的疑问:

var x = { a (b) { console.info('function called') } };
x.a(); 
Run Code Online (Sandbox Code Playgroud)

这将调用分配给aobject 属性的函数x.