迭代模式
- 定義:提供一種方法順序訪問一個聚合對象中各個元素,簡單說就是遍歷,比較簡單的一個設計模式,均可說算不上是一種設計模式
- 內部迭代器
var each = function (ary, cb) {
for(var i = 0,l = ary.length;i < l; i++) {
cb.call(ary[i], i, ary[i])
}
}
each([1,2,3], function (i,n) {
console.log(i,n)
})
// 在作瀏覽器能力監測的時候,會有不少if或者try語句,下面就是用迭代器來實現代碼更加方便維護和拓展
// 獲取upload上傳對象
var getIeUploadObj = function () {
try {
return new ActiveXObject('TXFTNActiveX.FTNUpload');
} catch (e) {
return false;
}
}
// 獲取flash上傳對象
var getFlashUploadObj = function () {
if (若是支持flash) {
var str = '<object type="application/x-shockwave-flash"></object>'
return $(str).appendTo($('body'));
}
return false;
}
// 獲取表單上傳對象
var getFromUploadObj = function () {
var str = '<input name="file" type="file">';
return $(str).appendTo($('body'));
}
// 迭代器
var iteratorUploadObj = function () {
for (var i = 0, fn; fn = arguments[i++];) {
var uploadObj = fn();
if (uploadObj !== false) {
return uploadObj;
}
}
}
uploadObj = iteratorUploadObj(getIeUploadObj,getFlashUploadObj,getFromUploadObj);
- 以上例子的好處有:
- 若是後期要加一個其餘的上傳對象,只須要增長獲取相對應的對象獲取程序便可,並傳入迭代器
- 能夠根據傳入的順序設置,獲取上傳對象的優先級