前端设计模式 - 迭代器

170 阅读1分钟

1、什么是迭代器

  • 迭代器就是提供一个对象能够顺序访问一个封闭数据结构/聚合对象中的一系列数据,并且不暴露对象的内部表示。

2、数组中的迭代器为例

数组中用到的 for-of 这些都是基于迭代器 Array.prototype[Symbol.iterator] 当重写了这个函数for-of这种方法都不能用了 当然如果按下面的方式去重写Array.prototype[Symbol.iterator] 效果就和原来的一样。

// 重写数组iterator
Array.prototype[Symbol.iterator]=function(){
   let i = 0;
   let self = this
   return {
       next :function(){
       let done = i>=self.length-1
       let value = done?undefined:self[i++]
       return {
           done ,
           value
       }
   }
 }
}

3、怎么实现迭代器

  • 必须要有next()方法。去遍历内部一些列的数据
  • 一个状态done去判断是否还有下一个迭代
  • 一个value获取当前迭代的值

实现方式

  • 内部实现:

    就是$.each、forEach 这些已经实现了在内部已经编辑好了

  • 外部实现

    实现一个外部迭代器,就是显示的请求迭代下一个元素

    var Iterator = function( obj ){
    var current = 0;
    var next = function(){
        current += 1;
    };
    var isDone = function(){
        return current >= obj.length;
    };
    var getCurrItem = function(){
        return obj[ current ];
    };
    return {
        next: next,
        isDone: isDone,
        getCurrItem: getCurrItem
     }
    };
    

    参考:www.cnblogs.com/xiaohuochai…