zoukankan      html  css  js  c++  java
  • 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接口
    • 作为数据结构
  • 相关阅读:
    Java实现 计蒜客 拯救行动
    Java实现 计蒜客 拯救行动
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 173 二叉搜索树迭代器
    Java实现 LeetCode 173 二叉搜索树迭代器
    Visual Studio的SDK配置
    怎样使用CMenu类
    mfc menu用法一
  • 原文地址:https://www.cnblogs.com/adhehe/p/9681659.html
Copyright © 2011-2022 走看看