定义
迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素。
分类
迭代器可以分为内部迭代器和外部迭代器,他们有各自的使用场景
- 内部迭代器:forEach函数,$.each
- 外部迭代器:Iterator
- 终止迭代器:迭代器可以像普通for循环中的break一样,提供一种跳出循环的方法。比如执行结果为false是跳出循环。
应用实例
根据不同的浏览器获取相应的上传组件对象
const getActiveUploadObj = () => {
try {
return new ActiveXObject('FTNUpload')
} catch(e) {
return false
}
}
const getFlashUploadObj = () => {
if (supprtFlash()) {
const dom = document.createElement('object');
dom.type = 'application/x-shockwave-flash';
return document.querySelector('body').appendChild(dom)
}
return false
}
const getFormUploadObj = () => {
const dom = document.createElement('input');
dom.type = 'file';
dom.name = 'file';
return document.querySelector('body').appendChild(dom)
}
const iteratorUploadObj = function() {
for (let i = 0, fn; fn = arguments[i++]; ) {
const uploadObj = fn();
if (uploadObj !== false) {
return uploadObj
}
}
}
const uploadObj = iteratorUploadObj(getActiveUploadObj, getFlashUploadObj, getFormUploadObj)
console.log(uploadObj)