Skip to content

迭代器模式

更好解决遍历,访问有序集合

概念

普通 for in 循环不是迭代器,for of 是迭代器,数组的 forEach 是一个简易的迭代器

  • 顺序访问有序结构
  • 不知道数据的长度和内部结构
  • 高内聚,低耦合

UML

代码

分析设计原则

  • 使用者和目标分离,解耦
  • 目标能自行控制其内部逻辑
  • 使用者不关心目标的内部结构

场景和应用

有序结构

字符串 数组 NodeList 等 DOM 集合 Map Set arguments 函数的传入的参数

注意:普通自定义对象不是有序结构,因为对象的属性并不会因为你赋值的顺序的不同而不同

Symbol.iterator 和迭代器

所有的有序结构都包含Symbol.iterator

应用

  • 用于 for...of (附:对比 for...in)
  • 用于快捷转数组,凡是实现了迭代器的有序集合都可以通过解构Array.from的方式来转化为数组
  • 用于创建 Map 和 Set,实现了迭代器的有序集合可以直接当做参数传给 Map 或者 Set,当然 Map 有一定的结构要求
  • 实现了迭代器的有序集合可以传给Promise.allPromise.race
  • yield*后面可以跟一个实现了迭代器的有序结构

Generator 生成器

基本使用

yield* 语法

yield 遍历 DOM 树

Released under the ISC License.