迭代器模式介绍
定义:迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。
使用的好处:迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素。
先看一个 jquery 迭代器
封装迭代器
内部迭代器
定义:迭代函数内部已经定义好了迭代原则,它完全接手整个迭代过程,外部只需要一次初始调用。
PS:这里设计each函数时参考了[].forEach函数,callback第一个参数为 value,第二个参数为 index。
使用内部迭代器:
PS:现在 ES5 已经实现了内部迭代器 [].foreEach(callback(currentValue, index, array)[, this]);
详细的使用说明请参考MDN-Array.prototype.forEach()
外部迭代器
定义:外部迭代器必须显式地请求迭代下一个元素,外部迭代器增加了一些调用的复杂度,但相对的也增强了迭代器的灵活性,我们可以手工控制迭代的过程或者顺序。
使用:判断两个数组是不是相等
中止迭代器
定义:在迭代过程,通过判断是否退出迭代器。
使用:
迭代器应用示例
需求:根据不同的浏览器获取相应的上传组件对象,将不同的上传对象封装到各自的函数里; 如果函数可用,则返回该对象,否则返回false,提示迭代器继续向下迭代。
定义上传组件方法:
实现迭代器:
PS:这里说明一下,如果前面的上传方案可以使用就使用,否则就使用后面的上传方案(但是要保证至少一种方式所有浏览器都能实现)。