js设计模式-迭代器模式

111 阅读1分钟

定义

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

分类

迭代器可以分为内部迭代器和外部迭代器,他们有各自的使用场景

  • 内部迭代器: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)