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----其他的主要内容,如果未能解决你的问题,请参考以下文章