摘要:不暴露該對象的內(nèi)部表示是指在通過迭代器訪問聚合中元素時迭代器訪問接口統(tǒng)一不用關(guān)心對象內(nèi)部細(xì)節(jié)。雖然靈活但是調(diào)用復(fù)雜度增加必須熟悉迭代器接口。
迭代器模式(Iterator),提供一種方法順序訪問一個聚合對象中的各種元素,而又不暴露該對象的內(nèi)部表示。
關(guān)于這個定義的個人理解,聚合對象是指可遍歷的對象,一般具有的特征就是可用下標(biāo)訪問且具有l(wèi)ength屬性。
不暴露該對象的內(nèi)部表示是指在通過迭代器訪問聚合中元素時,迭代器訪問接口統(tǒng)一,不用關(guān)心對象內(nèi)部細(xì)節(jié)。
迭代器分類 內(nèi)部迭代器內(nèi)部迭代器是指外界不用關(guān)心迭代器內(nèi)部實現(xiàn),初始調(diào)用一次迭代器就可以實現(xiàn)遍歷功能了。
let each=function (ary,cb) { for(let i=0,len=ary.length;i外部迭代器 外部迭代器是指必須顯式的請求迭代下一個元素
class Iterator{ constructor(obj){ this.obj=obj; this.current=0; } next() { this.current+=1; } isDone() { return this.current>=this.obj.length } getCurrentItem () { return this.obj[this.current]; } } let iterator1=new Iterator([1,2,3]); console.log(iterator1.next()) console.log(iterator1.getCurrentItem()) //2外部迭代器相對內(nèi)部迭代器的優(yōu)點是,可以手工控制迭代過程。雖然靈活,但是調(diào)用復(fù)雜度增加,必須熟悉迭代器接口。
實戰(zhàn)應(yīng)用 案例一let getUploadObjA=function () { try{ throw "testA"; }catch (e){ return false; } } let getUploadObjB=function () { return "testB"; } let getUploadObjC=function () { try{ throw "testC"; }catch (e){ return false; } } let iteratorUploadObj=function () { for(let i=0,len=arguments.length;i說明 其實在日常開發(fā)中,例如上傳文件有很多方式,插件,h5,input的file方式等等,根據(jù)兼容性,設(shè)定支持的先后順序放在迭代器中,以后維護(hù)時時若有其它方式
案例2
直接往迭代器中添加就行,非常方便??偟膩碚f就是方便代碼維護(hù)且具有良好的拓展性。let isType=function (type) { return function (obj) { return Object.prototype.toString.call(obj)==="[object "+type+"]"; } } let isWindow=isType("Window"); function isArraylike(obj) { let len="length" in obj &&obj.length; let typeObj=typeof obj; let typeLen=typeof len; if(typeObj ==="function" ||isWindow(obj)){ return false; } //Element if(obj.nodeType==1&&len){ return true; } return typeObj === "array" ||len===0 ||typeLen =="number" &&len>0 &&(len-1) in obj; } each=function (obj,cb) { let value, i=0, length=obj.length, isArray=isArraylike(obj); if(isArray){ for(;i說明 上面實現(xiàn)了一個通用的迭代器。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/81824.html
摘要:抓住了迭代器模式的本質(zhì),即是迭代,賦予了它極高的地位。輸出結(jié)果輸出結(jié)果小結(jié)迭代器模式幾乎是種設(shè)計模式中最常用的設(shè)計模式,本文主要介紹了是如何運用迭代器模式,并介紹了模塊生成迭代器的種方法,以及種生成迭代器的內(nèi)置方法。 showImg(https://segmentfault.com/img/bVbmv7W?w=4272&h=2848); 在軟件開發(fā)領(lǐng)域中,人們經(jīng)常會用到這一個概念——設(shè)...
摘要:抓住了迭代器模式的本質(zhì),即是迭代,賦予了它極高的地位。輸出結(jié)果輸出結(jié)果小結(jié)迭代器模式幾乎是種設(shè)計模式中最常用的設(shè)計模式,本文主要介紹了是如何運用迭代器模式,并介紹了模塊生成迭代器的種方法,以及種生成迭代器的內(nèi)置方法。 showImg(https://segmentfault.com/img/bVbmv7W?w=4272&h=2848); 在軟件開發(fā)領(lǐng)域中,人們經(jīng)常會用到這一個概念——設(shè)...
摘要:迭代器模式原文地址更多設(shè)計模式系列教程更多免費教程博主按每天一個設(shè)計模式旨在初步領(lǐng)會設(shè)計模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語言實現(xiàn)。迭代器模式常見和常用的有內(nèi)部迭代器外部迭代器倒序迭代器等等。 迭代器模式·原文地址 更多《設(shè)計模式系列教程》 更多免費教程 博主按:《每天一個設(shè)計模式》旨在初步領(lǐng)會設(shè)計模式的精髓,目前采用javascript(靠這吃飯)和python(純粹喜歡...
閱讀 2500·2021-11-15 18:14
閱讀 1723·2021-10-14 09:42
閱讀 3765·2021-10-11 10:58
閱讀 3963·2021-10-09 09:44
閱讀 2424·2021-09-26 09:55
閱讀 2448·2021-09-24 10:38
閱讀 2037·2021-09-04 16:48
閱讀 3278·2021-09-02 15:21