国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript 設計模式(六) 迭代器模式

xiongzenghui / 1639人閱讀

摘要:迭代器模式可以把迭代的過程從業務邏輯中分離出來,在使用迭代器模式后,即使不關心內部構造,也可以按順序訪問其他的每個元素。中的迭代器迭代器模式無非就是循環訪問聚合對象中的各個元素。目前絕大部分都內置了迭代器

迭代器模式指提供一種方法順序訪問一個聚合對象中的各個元素,而不需要暴露對象的內部。迭代器模式可以把迭代的過程從業務邏輯中分離出來,在使用迭代器模式后,即使不關心內部構造,也可以按順序訪問其他的每個元素。
jquery中的迭代器

迭代器模式無非就是循環訪問聚合對象中的各個元素。比如jquery中的each函數。

$.each([1,3,4], function(i, n){
    console.log("當前下標為: "+i)
    console.log("當前值為: "+i)
})
內部迭代器

jquery的each其實屬于內部迭代器,函數內部定義好了迭代規則,外部只需要一次初始調用即可。

缺點:由于內部迭代器的迭代規則已經寫好,所以無法迭代多個

var each = function(ary, callback){
    for(let i = 0, l=ary.length; i

假如現在有個需求,要判斷2個數組里的值是否完全相等,如果不改寫each里的代碼,那么入手的就只能是each的回調函數了

var each = function(ary, callback){
    for(let i = 0, l=ary.length; i
外部迭代器

外部迭代器必須顯示的請求迭代下一個元素

優點:增強了迭代器的靈活性,可以手工控制迭代的過程或者順序

缺點:增加了調用的復雜度

下面用外部迭代器改寫上面那個需求

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循環中的break一樣,提供出一種跳出循環的方法

var each = function(ary, callback){
    for(let i = 0, l=ary.length; i3){
        return false
    }
    console.log(n) //輸出1,2,3
})
總結

迭代器模式是一種相對簡單的模式,簡單到很多時候我們都不認為它是一種設計模式。目前絕大部分都內置了迭代器

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108678.html

相關文章

  • ES6 Features系列:GeneratorFunction介紹

    摘要:沒有顯示顯示顯示關鍵字迭代器生成器用于馬上退出代碼塊并保留現場,當執行迭代器的函數時,則能從退出點恢復現場并繼續執行下去。迭代器迭代器是一個擁有方法和方法的對象,通過函數不斷執行以關鍵字分割的代碼段,通過函數令分割的代碼段拋出異常。 一、前言                            第一次看koajs的示例時,發現該語句 function *(next){..........

    golden_hamster 評論0 收藏0
  • JS迭代模式JavaScript設計模式與開發實踐》閱讀筆記

    摘要:但實際中,內部迭代器和外部迭代器兩者并無優劣。迭代器并不只迭代數組迭代器模式不僅能迭代數組,還可以迭代一些類數組對象。晚安了,參考設計模式與開發實踐曾探本文作者本文鏈接迭代器模式設計模式與開發實踐閱讀筆記 迭代器模式:一個相對簡單的模式,目前絕大多數語言都內置了迭代器,以至于大家都不覺得這是一種設計模式 迭代器模式 迭代器模式指提供一種方法訪問一個聚合對象中的各個元素,而又不需要暴露該...

    djfml 評論0 收藏0
  • JS 異步編程種方案

    摘要:接下來介紹下異步編程六種方法。六生成器函數是提供的一種異步編程解決方案,語法行為與傳統函數完全不同,最大的特點就是可以控制函數的執行。參考文章前端面試之道異步編程的種方法你不知道的中卷函數的含義和用法替代的個理由 前言 我們知道Javascript語言的執行環境是單線程。也就是指一次只能完成一件任務。如果有多個任務,就必須排隊,前面一個任務完成,再執行后面一個任務。 這種模式雖然實現起...

    longmon 評論0 收藏0
  • JavaScript 設計模式(五):迭代模式

    摘要:文章內容分兩部分前半部分為迭代器模式概念后半部分為中迭代器上半部分開始迭代器模式提供一種方法順序訪問一個聚合對象中的各個元素,而又不需要暴露該對象的內部表示。下半部分開始的迭代器迭代器等同于遍歷器。執行該函數,會返回一個遍歷器對象。 showImg(https://segmentfault.com/img/bVbuyaZ?w=800&h=600); 文章內容分兩部分: 前半部分為 迭...

    zhou_you 評論0 收藏0
  • JavaScript iterator 設計模式

    摘要:迭代器模式就是按照順序訪問一個對象中元素,而不用暴露該對象的內部組成。迭代器模式就是將這個迭代實現從業務中分離出來。外部迭代器外部迭代器必須顯式地請求才會迭代下一個元素。 迭代器模式就是按照順序訪問一個對象中元素,而不用暴露該對象的內部組成。迭代器模式就是將這個迭代實現從業務中分離出來。 但實際開發中我們并不將他當成一個設計模式。 前瞻后顧 說起迭代器,想必對ES6有了解的同學應該不會...

    CocoaChina 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<