zoukankan      html  css  js  c++  java
  • javaScript设计模式与开发实践(四)迭代器模式

    迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

    实现一个each函数:

    var each = function( ary, callback ){
      for ( var i = 0, l = ary.length; i < l; i++ ){
        callback.call( ary[i], i, ary[ i ] ); // 把下标和元素当作参数传给callback 函数
      }
    };
    
    each( [ 1, 2, 3 ], function( i, n ){
      alert ( [ i, n ] );
    });
    

     该函数属于内部迭代器,内部定义好了迭代规则,外部只需要一次初始调用。

    实现一个compare函数:(外部迭代器)

    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
      }
    };
    
    
    var compare = function( iterator1, iterator2 ){
      while( !iterator1.isDone() && !iterator2.isDone() ){
        if ( iterator1.getCurrItem() !== iterator2.getCurrItem() ){
          throw new Error ( 'iterator1 和iterator2 不相等' );
        }
        iterator1.next();
        iterator2.next();
      }
      alert ( 'iterator1 和iterator2 相等' );
    }
    
    var iterator1 = Iterator( [ 1, 2, 3 ] );
    var iterator2 = Iterator( [ 1, 2, 3 ] );
    compare( iterator1, iterator2 ); // 输出:iterator1 和iterator2 相等
    
  • 相关阅读:
    poj 1753 Flip Game
    SDIBT 2345 (3.2.1 Factorials 阶乘)
    HDU 1176 免费馅饼
    HDU 1058 Humble Numbers
    HDU 1003 MAXSUM(最大子序列和)
    HDU1864 最大报销额
    HDU 1114 Piggy-Bank(完全背包)
    POJ 3624 Charm Bracelet
    处理textarea里Enter(回车换行符)
    uniApp打卡日历
  • 原文地址:https://www.cnblogs.com/dreamerjdw/p/6438271.html
Copyright © 2011-2022 走看看