• JavaScript设计模式_04_迭代器模式


    迭代器模式属于一种比较简单的设计模式,许多开发语言都内置了迭代器。这里要说的是迭代器分为内部迭代器和外部迭代器,它们都有各自的适用场景。

    /* pre:迭代器模式
     * 迭代器模式提供了一种顺序访问聚合元素内部对象的方法,而又不需要暴露对象内部的表示。
     */
    //-------- 示例1 --------
    /**
     * 内部迭代器:内部函数已经定义好迭代的规则,外部只需一次初始化调用。
     * 这里手动实现each遍历函数。
     */
    var each = function(arr, callback) {
        for(var i = arr.length - 1; i >= 0; i--) {
            callback.call(arr[i], i, arr[i]);
        }
    };
    
    each([1, 2, 3], function() {
        console.log("参数结果:" + Array.prototype.join.call(arguments, ","));
    });
    
    //------------ 示例2 ------------
    /**
     * 外部迭代器:必须显示地迭代下一个元素。外部迭代器增加了调用的复杂度,但相对地增强了迭代器的灵活性。
     */
    var iterator = function(obj) {
        var current = 0;
        var next = function() {
            current += 1;
        };
        var isDone = function() {
            return current >= obj.length;
        };
        var getCurrentItem = function() {
            return obj[current];
        };
        return {
            next: next,
            isDone: isDone,
            getCurrentItem: getCurrentItem
        }
    };
    var compare = function(iter1, iter2) {
        while(!iter1.isDone() && !iter2.isDone()) {
            if(iter1.getCurrentItem() != iter2.getCurrentItem()) {
                throw new Error("两个数组不相同;");
            }
            iter1.next();
            iter2.next();
        }
        console.log("两个数组相同。");
    };
    compare(iterator([1, 2, 3]), iterator([1, 2, 3]));
    /**
     * 内部迭代器和外部迭代器各有优缺点,使用时还需要根据具体场景,灵活应用。
     */
  • 相关阅读:
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1009:带余除法
    1007:计算(a+b)×c的值
    1007:计算(a+b)×c的值
    1007:计算(a+b)×c的值
    1006:A+B问题
    1006:A+B问题
    1006:A+B问题
    C# 运算符 ?、??、?: 、?. 、 各种问号的用法和说明
    C# 运算符 ?、??、?: 、?. 、 各种问号的用法和说明
    在C#中??和?分别是什么意思?
  • 原文地址:https://www.cnblogs.com/stinchan/p/6994125.html
Copyright © 2020-2023  润新知