摘要:迭代器模式可以把迭代的過程從業(yè)務邏輯中分離出來,在使用迭代器模式后,即使不關心內(nèi)部構造,也可以按順序訪問其他的每個元素。中的迭代器迭代器模式無非就是循環(huán)訪問聚合對象中的各個元素。目前絕大部分都內(nèi)置了迭代器
迭代器模式指提供一種方法順序訪問一個聚合對象中的各個元素,而不需要暴露對象的內(nèi)部。迭代器模式可以把迭代的過程從業(yè)務邏輯中分離出來,在使用迭代器模式后,即使不關心內(nèi)部構造,也可以按順序訪問其他的每個元素。jquery中的迭代器
迭代器模式無非就是循環(huán)訪問聚合對象中的各個元素。比如jquery中的each函數(shù)。
$.each([1,3,4], function(i, n){ console.log("當前下標為: "+i) console.log("當前值為: "+i) })內(nèi)部迭代器
jquery的each其實屬于內(nèi)部迭代器,函數(shù)內(nèi)部定義好了迭代規(guī)則,外部只需要一次初始調(diào)用即可。
缺點:由于內(nèi)部迭代器的迭代規(guī)則已經(jīng)寫好,所以無法迭代多個
var each = function(ary, callback){ for(let i = 0, l=ary.length; i假如現(xiàn)在有個需求,要判斷2個數(shù)組里的值是否完全相等,如果不改寫each里的代碼,那么入手的就只能是each的回調(diào)函數(shù)了
var each = function(ary, callback){ for(let i = 0, l=ary.length; i外部迭代器 外部迭代器必須顯示的請求迭代下一個元素
優(yōu)點:增強了迭代器的靈活性,可以手工控制迭代的過程或者順序
缺點:增加了調(diào)用的復雜度
下面用外部迭代器改寫上面那個需求
var Iterator = function(obj){ var current = 0 var next = function(){ current += 1 } var isDone = function(){ return current >= obj.length } var getCurrItem = function(){ return obj[current] } return { next, isDone, getCurrItem } } var compare = function(iterator1, iterator2) { while(!iterator1.isDone() && !iterator2.isDone()) { if(iterator1.getCurrItem() !== iterator2.getCurrItem()){ throw new Error("iterator1和iterator2不相等") } iterator1.next() iterator2.next() } alert("iterator1和iterator2不相等") } var iterator1 = Iterator([1,2,3]) var iterator2 = Iterator([2,2,3]) compare(iterator1, iterator2) //throw new Error("iterator1和iterator2不相等")中止迭代器迭代器可以像普通for循環(huán)中的break一樣,提供出一種跳出循環(huán)的方法
var each = function(ary, callback){ for(let i = 0, l=ary.length; i總結(jié)3){ return false } console.log(n) //輸出1,2,3 }) 迭代器模式是一種相對簡單的模式,簡單到很多時候我們都不認為它是一種設計模式。目前絕大部分都內(nèi)置了迭代器
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/108678.html
摘要:沒有顯示顯示顯示關鍵字迭代器生成器用于馬上退出代碼塊并保留現(xiàn)場,當執(zhí)行迭代器的函數(shù)時,則能從退出點恢復現(xiàn)場并繼續(xù)執(zhí)行下去。迭代器迭代器是一個擁有方法和方法的對象,通過函數(shù)不斷執(zhí)行以關鍵字分割的代碼段,通過函數(shù)令分割的代碼段拋出異常。 一、前言 第一次看koajs的示例時,發(fā)現(xiàn)該語句 function *(next){..........
摘要:但實際中,內(nèi)部迭代器和外部迭代器兩者并無優(yōu)劣。迭代器并不只迭代數(shù)組迭代器模式不僅能迭代數(shù)組,還可以迭代一些類數(shù)組對象。晚安了,參考設計模式與開發(fā)實踐曾探本文作者本文鏈接迭代器模式設計模式與開發(fā)實踐閱讀筆記 迭代器模式:一個相對簡單的模式,目前絕大多數(shù)語言都內(nèi)置了迭代器,以至于大家都不覺得這是一種設計模式 迭代器模式 迭代器模式指提供一種方法訪問一個聚合對象中的各個元素,而又不需要暴露該...
摘要:接下來介紹下異步編程六種方法。六生成器函數(shù)是提供的一種異步編程解決方案,語法行為與傳統(tǒng)函數(shù)完全不同,最大的特點就是可以控制函數(shù)的執(zhí)行。參考文章前端面試之道異步編程的種方法你不知道的中卷函數(shù)的含義和用法替代的個理由 前言 我們知道Javascript語言的執(zhí)行環(huán)境是單線程。也就是指一次只能完成一件任務。如果有多個任務,就必須排隊,前面一個任務完成,再執(zhí)行后面一個任務。 這種模式雖然實現(xiàn)起...
摘要:文章內(nèi)容分兩部分前半部分為迭代器模式概念后半部分為中迭代器上半部分開始迭代器模式提供一種方法順序訪問一個聚合對象中的各個元素,而又不需要暴露該對象的內(nèi)部表示。下半部分開始的迭代器迭代器等同于遍歷器。執(zhí)行該函數(shù),會返回一個遍歷器對象。 showImg(https://segmentfault.com/img/bVbuyaZ?w=800&h=600); 文章內(nèi)容分兩部分: 前半部分為 迭...
摘要:迭代器模式就是按照順序訪問一個對象中元素,而不用暴露該對象的內(nèi)部組成。迭代器模式就是將這個迭代實現(xiàn)從業(yè)務中分離出來。外部迭代器外部迭代器必須顯式地請求才會迭代下一個元素。 迭代器模式就是按照順序訪問一個對象中元素,而不用暴露該對象的內(nèi)部組成。迭代器模式就是將這個迭代實現(xiàn)從業(yè)務中分離出來。 但實際開發(fā)中我們并不將他當成一個設計模式。 前瞻后顧 說起迭代器,想必對ES6有了解的同學應該不會...
閱讀 3632·2023-04-25 23:32
閱讀 2047·2019-08-30 15:55
閱讀 2660·2019-08-30 15:52
閱讀 3119·2019-08-30 10:54
閱讀 847·2019-08-29 16:16
閱讀 656·2019-08-29 15:09
閱讀 3661·2019-08-26 14:05
閱讀 1641·2019-08-26 13:22