注意: 方法定义不是构造函数

一、语法:

var obj = {
  property( parameters… ) {},
  *generator( parameters… ) {},
  async property( parameters… ) {},
  async* generator( parameters… ) {},

  // with computed keys:
  [property]( parameters… ) {},
  *[generator]( parameters… ) {},
  async [property]( parameters… ) {},

  // compare getter/setter syntax:
  get property() {},
  set property(value) {}
};

1)简单写法 

var obj = {

foo:
function() { /* code */ }, bar: function() { /* code */ } }; //简写: var obj = {
foo() {
/* code */ }, bar() { /* code */ } };

二、生成器方法;

// 用有属性名的语法定义方法(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
console.log(it.next().value); // 2
console.log(it.next().value); // 3
console.log(it.next().value); // 4

注意: 简写语法中的星号(*)必须出现在生成器名前,也就是说* g(){}可以正常工作,而g *(){}不行。

三、Async方法:

// 用有属性名的语法定义方法(ES6之前):
var obj3 = {
  f: async function () {
    await some_promise;
  }
};

// 同一个方法,简写语法:
var obj3 = { 
  async f() {
    await some_promise;
  }
};

 四、例子

1)

var obj = {
  a : "foo",
  b(){ return this.a; }
};
console.log(obj.b()); // "foo"

2)

var bar = {
  foo0: function() { return 0; },
  foo1() { return 1; },
  ['foo' + 2]() { return 2; }
};

console.log(bar.foo0()); // 0
console.log(bar.foo1()); // 1
console.log(bar.foo2()); // 2

 

 posted on 2020-12-01 16:33  楼顶铁板烧  阅读(91)  评论(0编辑  收藏  举报