欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

javascript發(fā)布訂閱模式的示例分析-創(chuàng)新互聯(lián)

這篇文章主要介紹javascript發(fā)布訂閱模式的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

五河ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

發(fā)布訂閱模式

事件發(fā)布/訂閱模式 (PubSub) 在異步編程中幫助我們完成更松的解耦,甚至在 MVC、MVVC 的架構(gòu)中以及設(shè)計(jì)模式中也少不了發(fā)布-訂閱模式的參與。

優(yōu)點(diǎn):在異步編程中實(shí)現(xiàn)更深的解耦

缺點(diǎn):如果過多的使用發(fā)布訂閱模式,會增加維護(hù)的難度

實(shí)現(xiàn)發(fā)布訂閱模式

var Event = function() {
    this.obj = {}
}

Event.prototype.on = function(eventType,fn) {
    if(!this.obj[eventType]) {
        this.obj[eventType] = []
    }
    this.obj[eventType].push(fn)
}

Event.prototype.emit = function() {
    // 取第一個(gè)參數(shù),作為eventType
    var eventType = Array.prototype.shift.call(arguments);
    //  獲取事件數(shù)組
    var arr = this.obj[eventType];
    var len = arr.length;
    // 循環(huán)數(shù)組,一次執(zhí)行其中的函數(shù)
    for(var i=0;i<len;i++) {
        // 直接調(diào)用arr[i],其this指向?yàn)閡ndefined(嚴(yán)格模式下)
        // 因此用apply將this指向arr[i]
        // 數(shù)組shift函數(shù)取出第一個(gè)參數(shù),將剩下的參數(shù)傳入函數(shù)中
        arr[i].apply(arr[i],arguments)
    }
}

var ev = new Event()
ev.on('click',function(a) {  // 訂閱
    console.log(a)
})

ev.emit('click',1)   // 發(fā)布

以上代碼只能實(shí)現(xiàn)先訂閱,再發(fā)布。直接發(fā)布就會報(bào)錯(cuò)。如何實(shí)現(xiàn)可以先發(fā)布,然后訂閱?

var Event = function() {
    this.obj = {};
    this.cacheList = [];
}

Event.prototype.emit = function() {
    const args = arguments;  //函數(shù)參數(shù)
    const that = this;  //this指向,保持cache函數(shù)的this指向
    function cache() {
        var eventType = Array.prototype.shift.call(arg)
        var arr = that.obj[eventType]
        for (let i = 0; i < arr.length; i++) {
          arr[i].apply(arr[i], arg)
        }
    }
    this.cacheList.push(cache)  // 采用閉包,保持對emit函數(shù)中參數(shù)和that的引用
}

Event.prototype.on = function(eventType,fn) {
    if(!this.obj[eventType]) {
        this.obj[eventType] = []
    }
    this.obj[eventType].push(fn)
    // 在訂閱函數(shù)中執(zhí)行emit函數(shù)中緩存的函數(shù)
    for (let i = 0; i < this.cacheList.length; i++) {
        this.cacheList[i]()
    }
}

改成這樣后就實(shí)現(xiàn)了先發(fā)布函數(shù),再訂閱的過程。但是也只能先發(fā)布,然后再訂閱,反過來就行不通。

以上是“javascript發(fā)布訂閱模式的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁標(biāo)題:javascript發(fā)布訂閱模式的示例分析-創(chuàng)新互聯(lián)
文章地址:http://aaarwkj.com/article36/cchopg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、云服務(wù)器、品牌網(wǎng)站設(shè)計(jì)品牌網(wǎng)站建設(shè)、品牌網(wǎng)站制作App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
加勒比在线观看欧美一区| 久久96国产精品久久秘臀| 饥渴少妇高潮特殊按摩| 91免费在线观看高清| 亚洲中文字幕少妇熟女美妇| 国产精品国产三级国产av一区| 国产黄色免费精品网站| 欧美亚洲国产精品综合在线| 国产精品色网在线播放| 亚洲精品中文字幕一二三| 内射久久一区二区亚洲| 国产久精品热看久品热久热| 丝袜美腿诱惑国产在线| 涩五月婷婷开心中文字幕| 日韩黄色免费在线观看| 国产黄色av网站在线| 亚洲综合中文字幕精品| 91精品久久久久久| 日本欧美国产一区二区| 国产麻豆三级在线观看| 黄片在线免费观看欧美中文| 91精品麻豆国产自产在线| 日日干天天日夜夜操| 91久久高清国语自产拍| 亚洲伊人成综合人影院| 国产亚洲精品热视频在线观看| 亚洲精品国产av一区| 91精品国产91久久综合福利| 女厕所偷拍一区二区三区| 熟妞人妻精品一区二区视频| 国产 亚洲 一区 二区| 亚洲欧美综合精品二区| 亚洲欧美综合区丁香六月| 亚洲一区二区实拍偷拍视频| 黄片色呦呦视频免费看| 在线成人免费日韩视频| 丰满熟女人妻中文字幕免费| 91大神黑丝美女洗澡| 男人的天堂av最新版本| 国产91日韩欧美在线 | 日本束缚人妻一区二区三区 |