<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        JavaScript設計模式之觀察者模式(發(fā)布訂閱模式)原理與實現(xiàn)方法示例

        來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 22:10:56
        文檔

        JavaScript設計模式之觀察者模式(發(fā)布訂閱模式)原理與實現(xiàn)方法示例

        JavaScript設計模式之觀察者模式(發(fā)布訂閱模式)原理與實現(xiàn)方法示例:本文實例講述了JavaScript設計模式之觀察者模式(發(fā)布訂閱模式)原理與實現(xiàn)方法。分享給大家供大家參考,具體如下: 觀察者模式,又稱為發(fā)布訂閱模式,它定義了一種一對多的關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象,這個主題對象的狀態(tài)發(fā)生變化時就會通
        推薦度:
        導讀JavaScript設計模式之觀察者模式(發(fā)布訂閱模式)原理與實現(xiàn)方法示例:本文實例講述了JavaScript設計模式之觀察者模式(發(fā)布訂閱模式)原理與實現(xiàn)方法。分享給大家供大家參考,具體如下: 觀察者模式,又稱為發(fā)布訂閱模式,它定義了一種一對多的關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象,這個主題對象的狀態(tài)發(fā)生變化時就會通

        本文實例講述了JavaScript設計模式之觀察者模式(發(fā)布訂閱模式)原理與實現(xiàn)方法。分享給大家供大家參考,具體如下:

        觀察者模式,又稱為發(fā)布訂閱模式,它定義了一種一對多的關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象,這個主題對象的狀態(tài)發(fā)生變化時就會通知所有的觀察者對象,使得它們能夠自動更新自己的狀態(tài)。

        在觀察者模式中,并不是一個對象調(diào)用另一個對象的方法,而是一個對象訂閱另一個對象的特定活動并在狀態(tài)改變后獲得通知。訂閱者也稱為觀察者,而被觀察的對象稱為發(fā)布者或主題。當發(fā)生了一個重要的事件時,發(fā)布者將會通知(調(diào)用)所有訂閱者并且可能經(jīng)常以事件對象的形式傳遞消息。

        思路:

        ① 發(fā)布者需要一個數(shù)組類型的屬性subscribers,以存儲所有的訂閱者;

        ② 訂閱subscribe():將新的訂閱者加入到這個數(shù)組中去;

        ③ 退訂unsubscribe():從訂閱者數(shù)組中刪除某個訂閱者;

        ④ 發(fā)布publish():循環(huán)遍歷subscribers數(shù)組中的每一個元素,并通知他們,即發(fā)送消息,意味著調(diào)用訂閱者的某個方法。因此,當用戶訂閱信息時,該訂閱者需要向subscribe()提供它的其中一個方法。

        subscribe()unsubscribe()publish()三種方法都需要一個type參數(shù),因為發(fā)布者可能觸發(fā)多個事件,而用戶可能僅選擇訂閱其中一種,而不是另外一種。

        使用觀察者模式的好處:

        ① 支持簡單的廣播通信,自動通知所有已經(jīng)訂閱過的對象。

        ② 頁面載入后目標對象很容易與觀察者存在一種動態(tài)關(guān)聯(lián),增加了靈活性。

        ③ 目標對象與觀察者之間的抽象耦合關(guān)系能夠單獨擴展以及重用。

        在JavaScript中,一般使用事件模型來替代傳統(tǒng)的觀察者模式。 DOM事件,也是JavaScript和DOM之間實現(xiàn)的一種觀察者模式。

        Eg1:

        監(jiān)聽用戶單擊按鈕的動作,但沒有辦法預知用戶將在什么時候點擊。因此,訂閱按鈕上的click事件,當按鈕被點擊時,便向訂閱者發(fā)布此消息。

        btn.addEventListener("click", function() {
         console.log("First click");
        }, false);
        // 可以有多個訂閱者
        btn.addEventListener("click", function() {
         console.log("Second click");
        }, false);
        btn.click();
        
        

        Eg2:

        非觀察者模式:

        $.ajax({
         url: './login',
         type: 'post',
         contentType: 'application/json',
         dataType:'json',
         success: function(data) {
         if(data.status === "success") { // 登錄成功,渲染header、footer
         header.setInfo(data.headerInfo);
         footer.setInfo(data.footerInfo);
         }
         }
        });
        
        

        觀察者模式:

        $.ajax({
         ...,
         success: function(data) {
         if(data.status === "success") {
         // 登錄成功,發(fā)布登陸成功消息
         login.trigger("loginsuccess", data);
         }
         }
        });
        var header = (function() { // 監(jiān)聽消息
         login.listen("loginsuccess", function(data){
         header.setInfo(data.headerInfo);
         });
         return {
         setInfo: function(data) {
         console.log("渲染header");
         }
         };
        })();
        var footer = (function() {
         login.listen("loginsuccess", function(data){
         footer.setInfo(data.navInfo);
         });
         return {
         setInfo: function(data) {
         console.log("渲染nav");
         }
         };
        })();
        
        

        更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學運算用法總結(jié)》

        希望本文所述對大家JavaScript程序設計有所幫助。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JavaScript設計模式之觀察者模式(發(fā)布訂閱模式)原理與實現(xiàn)方法示例

        JavaScript設計模式之觀察者模式(發(fā)布訂閱模式)原理與實現(xiàn)方法示例:本文實例講述了JavaScript設計模式之觀察者模式(發(fā)布訂閱模式)原理與實現(xiàn)方法。分享給大家供大家參考,具體如下: 觀察者模式,又稱為發(fā)布訂閱模式,它定義了一種一對多的關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象,這個主題對象的狀態(tài)發(fā)生變化時就會通
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲伦另类中文字幕| 亚洲精品动漫人成3d在线| 亚洲黄色片在线观看| 国产午夜成人免费看片无遮挡| 亚洲国产精品自产在线播放| 国产亚洲视频在线| 免费在线观看日韩| 国产精品美女久久久免费| 亚洲啪啪AV无码片| 日韩电影免费在线观看| 亚洲最大中文字幕| 免费毛片在线播放| 永久免费精品影视网站| 亚洲中文字幕无码久久精品1| a级片免费观看视频| 99亚洲精品高清一二区| 国产精品色拉拉免费看| 亚洲日韩AV一区二区三区中文 | 亚洲熟妇无码一区二区三区| 大地资源在线观看免费高清| 日韩国产精品亚洲а∨天堂免| 成人亚洲综合天堂| 国产啪精品视频网站免费尤物| 亚洲天堂中文资源| 在线精品免费视频无码的| 全黄A免费一级毛片| 亚洲视频.com| 日韩人妻无码免费视频一区二区三区| 337p日本欧洲亚洲大胆人人| 夜夜春亚洲嫩草影院| 成年人视频免费在线观看| 欧洲乱码伦视频免费国产| 亚洲精品高清国产一久久| 日本不卡在线观看免费v| 在线看片免费人成视频播| 国产精品亚洲综合久久| 亚洲中文字幕在线第六区| 日韩免费一区二区三区在线 | 久久久久国产亚洲AV麻豆| 亚洲人成免费电影| 亚欧乱色国产精品免费视频|