這篇文章主要介紹javascript發(fā)布訂閱模式的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
五河ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!發(fā)布訂閱模式
事件發(fā)布/訂閱模式 (PubSub) 在異步編程中幫助我們完成更松的解耦,甚至在 MVC、MVVC 的架構(gòu)中以及設計模式中也少不了發(fā)布-訂閱模式的參與。
優(yōu)點:在異步編程中實現(xiàn)更深的解耦
缺點:如果過多的使用發(fā)布訂閱模式,會增加維護的難度
實現(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() { // 取第一個參數(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指向為undefined(嚴格模式下) // 因此用apply將this指向arr[i] // 數(shù)組shift函數(shù)取出第一個參數(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ā)布
以上代碼只能實現(xiàn)先訂閱,再發(fā)布。直接發(fā)布就會報錯。如何實現(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]() } }
改成這樣后就實現(xiàn)了先發(fā)布函數(shù),再訂閱的過程。但是也只能先發(fā)布,然后再訂閱,反過來就行不通。
以上是“javascript發(fā)布訂閱模式的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網(wǎng)頁標題:javascript發(fā)布訂閱模式的示例分析-創(chuàng)新互聯(lián)
文章地址:http://jinyejixie.com/article36/cchopg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗、云服務器、品牌網(wǎng)站設計、品牌網(wǎng)站建設、品牌網(wǎng)站制作、App設計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容