迭代器模式

2015-06-10  本文已影响49人  JohnSmith

定義

提供一種方法順序訪問一個聚合對象中的每個元素,而又不需要暴露該對象的內部表示。

要點

核心代碼

\\ 內部迭代器
var each = function(arr, callback) {
    for (var i = 0, l = arr.length; i < l; i++) {
        if (callback(i, arr[i]) === false) {
            break;
        }
    }
};

each([1, 2, 3], function(i, n) {
    // callback function
});
\\ 外部迭代器
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()) {
            console.log('Not Equal.');
            return;
        }
        iterator1.next();
        iterator2.next();
    }
    console.log('Equal.');
};

var iterator1 = Iterator([1, 2, 3]);
var iterator2 = Iterator([1, 2, 3]);
compare(iterator1, iterator2);
上一篇 下一篇

猜你喜欢

热点阅读