从es6开始,在对象初始器中引入了一种更简短定义方法的语法,这是一种把方法名直接赋给函数的简写方式。
var obj = { foo: function() { /* code */ }, bar: function() { /* code */ } };
上面代码可被简写为:
var obj = { foo() { /* code */ }, bar() { /* code */ } };
该简写语法getter和setter语法类似。
生成器方法
生成器方法也可以用这种简写语法定义。
// 用有属性名的语法定义方法(ES6之前): var obj2 = { g: function*() { var index = 0; while(true) yield index++; } }; // 同一个方法,简写语法: var obj2 = { * g() { var index = 0; while(true) yield index++; } }; var it = obj2.g(); console.log(it.next().value); // 0 console.log(it.next().value); // 1
async方法
async方法也可以使用简写语法来定义。
// 用有属性名的语法定义方法(ES6之前): var obj3 = { f: async function () { await some_promise; } }; // 同一个方法,简写语法: var obj3 = { async f() { await some_promise; } };
async生成器方法
var obj4 = { f: async function* () { yield 1; yield 2; yield 3; } }; // 简写 var obj4 = { async* f() { yield 1; yield 2; yield 3; } };
所有方法定义不是构造函数,如果您尝试实例化它们,将抛出TypeError
var obj = { method() {} }; new obj.method; // TypeError: obj.method is not a constructor var obj = { * g() {} }; new obj.g; // TypeError: obj.g is not a constructor (changed in ES2016)
原文:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Method_definitions