您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)js發(fā)布的訂閱模式的作用有哪些,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
1、發(fā)布訂閱模式可以廣泛應(yīng)用于異步編程,這是一種取代回調(diào)函數(shù)的方案。
2、發(fā)布訂閱模式可以取代對象之間硬編碼的通知機制,一個對象不再需要明確調(diào)用另一個對象的接口。
實例
// 由于這些成員對于任何發(fā)布者對象都是通用的,故將它們作為獨立對象的一個部分來實現(xiàn)是很有意義的。那樣我們可將其復(fù)制到任何對象中,并將任意給定對象變成一個發(fā)布者。 // 如下實現(xiàn)一個通用發(fā)布者,定義發(fā)布者對象…… let publisher = { subscribers: { any: [] }, subscribe: function (fn, type = `any`) { if (typeof this.subscribers[type] === `undefined`) { this.subscribers[type] = []; } this.subscribers[type].push(fn); }, unSubscribe: function (fn, type = `any`) { let newSubscribers = []; this.subscribers[type].forEach((item, i) => { if (item !== fn) { newSubscribers.push(fn); } }); this.subscribers[type] = newSubscribers; }, publish: function (args, type = `any`) { this.subscribers[type].forEach((item, i) => { item(args); }); } }; // 定義一個函數(shù)makePublisher(),它接受一個對象作為參數(shù),通過把上述通用發(fā)布者的方法復(fù)制到該對象中,從而將其轉(zhuǎn)換為一個發(fā)布者 function makePublisher(obj) { for (let i in publisher) { if (publisher.hasOwnProperty(i) && typeof publisher[i] === `function`) { obj[i] = publisher[i]; } } obj.subscribers = { any: [] }; } // 實現(xiàn)paper對象 var paper = { daily: function () { this.publish(`big news today!`); }, monthly: function () { this.publish(`interesting analysis`, `monthly`); } }; // 將paper構(gòu)造成一個發(fā)布者 makePublisher(paper); // 看看訂閱對象joe,該對象有兩個方法: var joe = { drinkCoffee: function (paper) { console.log(`Just read ` + paper); }, sundayPreNap: function (monthly) { console.log(`About to fall asleep reading this ` + monthly); } }; // paper注冊joe(即joe向paper訂閱) paper.subscribe(joe.drinkCoffee); paper.subscribe(joe.sundayPreNap, `monthly`); // 即joe為默認(rèn)“any”事件提供了一個可被調(diào)用的方法,而另一個可被調(diào)用的方法則用于當(dāng)“monthly”類型的事件發(fā)生時的情況?,F(xiàn)在讓我們來觸發(fā)一些事件: paper.daily(); // Just read big news today paper.daily(); // Just read big news today paper.monthly(); // About to fall asleep reading this interesting analysis paper.monthly(); // About to fall asleep reading this interesting analysis paper.monthly(); // About to fall asleep reading this interesting analysis
關(guān)于js發(fā)布的訂閱模式的作用有哪些就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。