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

資訊專欄INFORMATION COLUMN

JS 回調(diào)模式

oliverhuang / 2308人閱讀

摘要:對(duì)這種問題的解決方法是采用回調(diào)模式。可以將節(jié)點(diǎn)隱藏邏輯以回調(diào)函數(shù)的方式傳遞給并委托執(zhí)行檢查參數(shù)是否為可調(diào)用復(fù)雜邏輯,篩選出符合的元素那么現(xiàn)在回調(diào)函數(shù)可選,重構(gòu)后加入回調(diào)函數(shù)參數(shù)的仍然可以像以前一樣使用,而不會(huì)破壞舊的原始代碼。

1. 回調(diào)示例

如果有個(gè)模塊 findeNodes() ,任務(wù)是找到期望的 DOM 元素并使用 hide() 處理:

function findNodes() {
    var i = 10000, nodes = [], found
    while (i--) {
        // ...復(fù)雜邏輯,篩選出符合的元素 found
        nodes.push(found)
    }
    return nodes
}

function hide(nodes) {
    for (let i = 0, max = nodes.length; i < max; i++) {
        nodes[i].style.display = "none"
    }
}
hide(findNodes())
2. 改進(jìn)

可以看到函數(shù) findNodes()hide() 分別兩次進(jìn)行了循環(huán),這是十分低效的,如果要避免這種重復(fù)循環(huán),并且只要在 findNodes() 中選擇的時(shí)候就進(jìn)行 hide() 那么將是高效的實(shí)現(xiàn)方式。如果在 findNodes() 中實(shí)現(xiàn)修改邏輯,由于檢索和修改邏輯耦合,那么它將不再是一個(gè)通用函數(shù)。對(duì)這種問題的解決方法是采用回調(diào)模式

可以將節(jié)點(diǎn)隱藏邏輯以回調(diào)函數(shù)的方式傳遞給 findNodes() 并委托執(zhí)行:

function findNodes(callback) {
    var i = 10000, nodes = [], found

    if (typeof callback !== "function") {    // 檢查參數(shù)是否為可調(diào)用
        callback = false
    }

    while (i--) {
        // ...復(fù)雜邏輯,篩選出符合的元素 found
        if (callback) {
            callback(found)
        }
        nodes.push(found)
    }
    return nodes
}

function hide(nodes) {
    nodes[i].style.display = "none"
}

findNodes(hide)

那么現(xiàn)在回調(diào)函數(shù)可選,重構(gòu)后加入回調(diào)函數(shù)參數(shù)的 findNodes() 仍然可以像以前一樣使用,而不會(huì)破壞舊 API 的原始代碼。

3. 回調(diào)與作用域

前面的例子中,回調(diào)執(zhí)行的語句:callback(para),在多數(shù)情況下有效,但是如果傳遞的函數(shù)是對(duì)象的方法且有 this 那么回調(diào)方法里的 this 將指向的是全局對(duì)象,從而發(fā)生意外。

解決這個(gè)問題的方法是傳遞回調(diào)函數(shù),并且還傳遞該回調(diào)函數(shù)所屬的對(duì)象:

function findNodes (callback, callback_obj){
    ...
    if (typeof callback === "function"){
        callback.call(callback_obj, found)
    }
    ...
}
findNodes (obj.sayName, obj)

當(dāng)然,可以把方法作為字符串來傳遞,避免重復(fù)兩次輸入該對(duì)象的名稱:

findNodes (callback, callback_obj){
    if (typeof callback === "string"){
        callback = callback_obj[callback]
    }
    if (typeof callback === "function"){
        callback.call(callback_obj, found)
    }
}
findNodes("sayName", Obj)

本文是系列文章,可以相互參考印證,共同進(jìn)步~

JS 抽象工廠模式

JS 工廠模式

JS 建造者模式

JS 原型模式

JS 單例模式

JS 回調(diào)模式

JS 外觀模式

JS 適配器模式

JS 利用高階函數(shù)實(shí)現(xiàn)函數(shù)緩存(備忘模式)

JS 狀態(tài)模式

JS 橋接模式

JS 觀察者模式

網(wǎng)上的帖子大多深淺不一,甚至有些前后矛盾,在下的文章都是學(xué)習(xí)過程中的總結(jié),如果發(fā)現(xiàn)錯(cuò)誤,歡迎留言指出~

參考: P65

PS:歡迎大家關(guān)注我的公眾號(hào)【前端下午茶】,一起加油吧~

另外可以加入「前端下午茶交流群」微信群,長(zhǎng)按識(shí)別下面二維碼即可加我好友,備注加群,我拉你入群~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/92143.html

相關(guān)文章

  • 《Node.js設(shè)計(jì)模式》Node.js基本模式

    摘要:回調(diào)函數(shù)是在異步操作完成后傳播其操作結(jié)果的函數(shù),總是用來替代同步操作的返回指令。下面的圖片顯示了中事件循環(huán)過程當(dāng)異步操作完成時(shí),執(zhí)行權(quán)就會(huì)交給這個(gè)異步操作開始的地方,即回調(diào)函數(shù)。 本系列文章為《Node.js Design Patterns Second Edition》的原文翻譯和讀書筆記,在GitHub連載更新,同步翻譯版鏈接。 歡迎關(guān)注我的專欄,之后的博文將在專欄同步: Enc...

    Seay 評(píng)論0 收藏0
  • 異步

    摘要:在異步機(jī)制中,任務(wù)隊(duì)列就是用來維護(hù)異步任務(wù)回調(diào)函數(shù)的隊(duì)列。四對(duì)象對(duì)象是工作組提出的一種規(guī)范,目的是為異步編程提供統(tǒng)一接口。 異步 1.JavaScript單線程的理解 Javascript語言的執(zhí)行環(huán)境是單線程(single thread)。所謂單線程,就是指一次只能完成一件任務(wù)。如果有多個(gè)任務(wù),就必須排隊(duì),前面一個(gè)任務(wù)完成,再執(zhí)行后面一個(gè)任務(wù),以此類推。 2.JavaScript單線...

    goji 評(píng)論0 收藏0
  • [ JS 進(jìn)階 ] 異步編程 promise模式 的簡(jiǎn)單實(shí)現(xiàn)

    摘要:為了降低異步編程的復(fù)雜性,所以。難理解請(qǐng)參考的誤區(qū)以及實(shí)踐異步編程的模式異步編程的種方法 異步編程 javascript異步編程, web2.0時(shí)代比較熱門的編程方式,我們平時(shí)碼的時(shí)候也或多或少用到,最典型的就是異步ajax,發(fā)送異步請(qǐng)求,綁定回調(diào)函數(shù),請(qǐng)求響應(yīng)之后調(diào)用指定的回調(diào)函數(shù),沒有阻塞其他代碼的執(zhí)行。還有像setTimeout方法同樣也是異步執(zhí)行回調(diào)的方法。 如果對(duì)異步編程...

    svtter 評(píng)論0 收藏0
  • JS 建造者模式

    摘要:如何應(yīng)對(duì)這種變化如何提供一種封裝機(jī)制來隔離出復(fù)雜對(duì)象的各個(gè)部分的變化,從而保持系統(tǒng)中的穩(wěn)定構(gòu)建算法不隨著需求改變而改變這就是要說的建造者模式。建造者模式,將一個(gè)復(fù)雜對(duì)象的構(gòu)建層與其表示層相互分離,使得同樣的構(gòu)建過程可以采用不同的表示。 1. 簡(jiǎn)介 在軟件系統(tǒng)中,有時(shí)候面臨著一個(gè)復(fù)雜對(duì)象的創(chuàng)建工作,其通常由各個(gè)部分的子對(duì)象用一定的算法構(gòu)成;由于需求的變化,這個(gè)復(fù)雜對(duì)象的各個(gè)部分經(jīng)常面臨著...

    channg 評(píng)論0 收藏0
  • 詳解JavaScript函數(shù)模式

    摘要:函數(shù)表達(dá)式又名匿名函數(shù)為變量賦的值是函數(shù)定義本身。在語言里任何匿名函數(shù)都是屬于對(duì)象。這種情況下,就叫做回調(diào)函數(shù)。如上面代碼示例展示了文檔單擊事件時(shí)以冒泡模式傳遞給回調(diào)函數(shù)的特別適用于事件驅(qū)動(dòng)編程,因?yàn)榛卣{(diào)模式支持程序以異步方式運(yùn)行。 JavaScript設(shè)計(jì)模式的作用是提高代碼的重用性,可讀性,使代碼更容易的維護(hù)和擴(kuò)展 在javascript中,函數(shù)是一類對(duì)象,這表示他可以作為參數(shù)傳遞...

    wwolf 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<