对象中方法的简写

从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

posted @ 2019-09-23 16:43  seeBetter  阅读(1584)  评论(0编辑  收藏  举报