• 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接口
    • 作为数据结构
  • 相关阅读:
    MVC6 发布IIS
    Spring-Spring Bean后置处理器
    Java中重载和重写
    Java基础
    Python高级教程-多重继承
    Spring Bean声明周期
    Spring Bean作用域
    Spring-ApplicationContext容器
    Spring-BeanFactory容器
    Spring-Spring IoC容器
  • 原文地址:https://www.cnblogs.com/adhehe/p/9681659.html
Copyright © 2020-2023  润新知