ES6知识点整理之----Generator----其他

Posted adhehe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6知识点整理之----Generator----其他相关的知识,希望对你有一定的参考价值。

1、如果一个对象的属性是 Generator 函数,可以简写成下面的形式。

let obj = {
  * myGeneratorMethod() {
    ···
  }
};

2、Generator 函数总是返回一个遍历器,这个遍历器是 Generator 函数的实例,也继承了 Generator 函数的prototype对象上的方法。

3、Generator 函数不能跟new命令一起用,会报错。

3、Generator 函数返回一个正常的对象实例,既可以用next方法,又可以获得正常的this

function* F() {
  this.a = 1;
  yield this.b = 2;
  yield this.c = 3;
}
var obj = {};

//使用call方法绑定Generator函数内部的this
var f = F.call(obj);

f.next();  // Object {value: 2, done: false}
f.next();  // Object {value: 3, done: false}
f.next();  // Object {value: undefined, done: true}

obj.a // 1
obj.b // 2
obj.c // 3

4、将 执行的是遍历器对象f 和 生成的对象实例obj 统一

function* F() {
  this.a = 1;
  yield this.b = 2;
  yield this.c = 3;
}

// 将空对象obj 换成 F.prototype
var f = F.call(F.prototype); f.next(); // Object {value: 2, done: false} f.next(); // Object {value: 3, done: false} f.next(); // Object {value: undefined, done: true} f.a // 1 f.b // 2 f.c // 3

5、将F改成构造函数,对它执行new 命令

function* gen() {
  this.a = 1;
  yield this.b = 2;
  yield this.c = 3;
}

function F() {
  return gen.call(gen.prototype);
}

var f = new F();

f.next();  // Object {value: 2, done: false}
f.next();  // Object {value: 3, done: false}
f.next();  // Object {value: undefined, done: true}

f.a // 1
f.b // 2
f.c // 3

6、Generator 与状态机。Generator 之所以可以不用外部变量保存状态,是因为它本身就包含了一个状态信息

var clock = function* () {
  while (true) {
    console.log(‘Tick!‘);
    yield;
    console.log(‘Tock!‘);
    yield;
  }
};

7、Generator 与协程(暂略)

8、Generator 与上下文。(暂略)

9、应用:

  • 异步操作的同步化表达
  • 控制流管理
  • 部署Iterator接口
  • 作为数据结构

 



以上是关于ES6知识点整理之----Generator----其他的主要内容,如果未能解决你的问题,请参考以下文章

ES6知识点整理之----Generator----异步

ES6知识点整理之----对象扩展

ES6知识点整理之----Proxy----API

ES6知识点整理之----Proxy----this

ES6知识点整理之----async----语法

ES6知识点整理之----正则表达式扩展