js编程-iterator/generator

101 阅读1分钟

1、iterator 遍历器 接口机制 为各种不同的数据结构提供一种访问机制,任何数据结构只要部署Iterator接口,就可以完成遍历操作,依次处理该数据结构的所有成员

  • 拥有next方法用于依次遍历数组结构的成员;

  • 每一次遍历返回的结果是一个对象{ done: false, value: xxx }

  • done:记录是否遍历完成

  • value::当前遍历的结果

拥有Symbol.iterator属性的数据结构(值),都为可遍历的。可以基于for of 循环处理

+数组 +类数组 + String + Set +Map + generator object

对象默认不具备Symbol.iterator, 属于不可遍历的数据结构

2、generator 生成器函数 符合可迭代和迭代器协议 (基于Iterator迭代器规范管理代码或者异步编程的)

生成器函数中this ---> window

【把它当成一个实例 proto

生成器函数就是GeneratorFunction 的实例,生成器函数.**proto = GeneratorFunction.prototype**

({}).toString.call(生成器函数) => "[object GeneratorFunction]"

【把它当成一个构造函数 prototype】

生成器构造函数.prototype => 原型对象(空对象:可以自己设置内容)

生成器构造函数.prototype.**proto** === GeneratorFunction.prototype

创建生成器函数的实例:let func = 生成器函数();

生成器函数中的代码没有执行,

  • 当后续执行实例.next()才会把这些代码执行,

  • 并且每一次执行next遇到一个yield就结束 =》每一个执行返回的结果是符合迭代器规范的, { done: true/false , value: yield 后面的值或者是函数返回的值}