<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
        主站蜘蛛池模板: 国产免费AV片在线观看| XXX2高清在线观看免费视频| 91精品导航在线网址免费| 国产亚洲精久久久久久无码77777| 亚洲精品无码av中文字幕| 成年性生交大片免费看| 亚洲熟伦熟女专区hd高清| 妞干网手机免费视频| 特级无码毛片免费视频| 久久久亚洲精品蜜桃臀| 你是我的城池营垒免费看| 久久精品国产99精品国产亚洲性色| 永久免费A∨片在线观看| 91嫩草私人成人亚洲影院| 亚洲大片免费观看| 亚洲无mate20pro麻豆| 免费看片免费播放| 免费中文字幕视频| 亚洲精品无码MV在线观看| 特级精品毛片免费观看| 久久精品亚洲AV久久久无码| 成年女人午夜毛片免费视频| 国产成人亚洲精品无码AV大片| 久久亚洲av无码精品浪潮| 精品亚洲永久免费精品| 亚洲激情视频网站| 国产又粗又猛又爽又黄的免费视频| 污网站在线免费观看| 青青草原精品国产亚洲av| 好男人看视频免费2019中文| 一级毛片免费播放视频| 亚洲黄色三级视频| 国产免费观看a大片的网站| 久久久久久av无码免费看大片| 少妇中文字幕乱码亚洲影视| 日本特黄a级高清免费大片| 国产美女视频免费观看的网站| 亚洲精品国产啊女成拍色拍| 国产无遮挡吃胸膜奶免费看视频| 男女一边摸一边做爽的免费视频| 亚洲午夜国产精品|