【夯实基础】《JavaScript设计模式与开发实践》笔记——迭代器模式

迭代器模式

  • 内部迭代器和外部迭代器
    • 内部迭代器
    • 外部迭代器

迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象 5 的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素。

内部迭代器和外部迭代器

内部迭代器

  • 定义
    系统封装好。我们直接拿来用的函数
  • 优缺点
    内部迭代器在调用的时候非常方便,外界不用关心迭代器内部的实现,跟迭代器的交互也仅 仅是一次初始调用,但这也刚好是内部迭代器的缺点

外部迭代器

外部迭代器必须显式地请求迭代下一个元素

  • 优缺点
    外部迭代器增加了一些调用的复杂度,但相对也增强了迭代器的灵活性,我们可以手工控制 迭代的过程或者顺序,例如
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 相等

你可能感兴趣的:(夯实基础,javascript,前端)