迭代器模式
更好解决遍历,访问有序集合
概念
普通 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.all和Promise.race yield*后面可以跟一个实现了迭代器的有序结构