码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-09-20 17:25:33      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:形式   使用   控制   执行   nbsp   func   知识点   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----其他

标签:形式   使用   控制   执行   nbsp   func   知识点   generator   知识   

原文地址:https://www.cnblogs.com/adhehe/p/9681659.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!