迭代器模式

介绍

  • 顺序访问一个集合
  • 使用者无需知道集合的内部结构(封装)

示例

生活中暂无形象示例来说明迭代器模式。

UML类图

迭代器模式UML类图.png

代码演示

class Iterator {
    constructor(container) {
        this.list = container.list;
        this.index = 0;
    }
    next() {
        if (this.hasNext()) {
            return this.list[this.index++];
        }
        return null;
    }
    hasNext() {
        if (this.index >= this.list.length) {
            return false;
        }
        return true;
    }
}

class Container {
    constructor(list) {
        this.list = list;
    }
    // 生成遍历器
    getIterator() {
        return new Iterator(this);
    }
}

let arr = [1, 2, 4, 5, 6];
let container = new Container(arr);
let iterator = container.getIterator();
while(iterator.hasNext()) {
    console.log(iterator.next());
}

场景

  • jQuery的each函数
  • ES6 Iterator
ES6 Iterator为何存在?
  • ES6语法中,有序集合的数据类型已经有很多
  • Array Map Set String TypedArray arguments Nodelist
  • 需要有一个统一的遍历接口来遍历所有数据类型
  • (注意,object不是有序集合,可以用Map代替)
ES6 Iterator是什么?
  • 以上数据类型,都有[Symbol.iterator]属性
  • 属性值是函数,执行函数返回一个迭代器
  • 这个迭代器就有next方法可顺序迭代子元素
  • 可运行Array.prototype[Symbol.iterator]来测试
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文章内容分两部分: 前半部分为 “迭代器模式” 概念; 后半部分为 ES6 中 Iterator (迭代器) 上半...
    以乐之名阅读 535评论 0 2
  • ◆ 顺序访问一个集合◆ 使用者无需知道集合的内部结构(封装) 应用场景◆ jQuery each◆ ES6 Ite...
    zxhnext阅读 204评论 0 0
  • 迭代器模式 顺序访问一个集合 使用者无需知道集合的内部结构 示例 没有合适的例子, 使用jQuery 演示 UML...
    hankchang阅读 236评论 0 0
  • 介绍 顺序访问一个集合(有序的:Array) 使用者无需知道集合的内部结构 实例 使用jQ演示 上述的实例中,如果...
    w候人兮猗阅读 263评论 0 3
  • 介绍 顺序访问一个集合 使用者无需知道集合的内部结构(封装)迭代器模式通常都是对一个数组,集合等进行访问,迭代器的...
    林海_Mense阅读 740评论 0 0