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 相等
    
  • 相关阅读:
    快速幂取模
    程序人生系列之新闻发布系统 0105
    JavaWeb之博客系统(四)
    [转]树状数组
    题目:免费午餐
    题目:删数问题
    题目:三元组
    题目:分子团
    题目:[汪老师结婚]婚礼上的袭击
    题目:[SBN号码]
  • 原文地址:https://www.cnblogs.com/dreamerjdw/p/6438271.html
Copyright © 2011-2022 走看看