<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關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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原生實現觀察者模式的示例_javascript技巧

        來源:懂視網 責編:小OO 時間:2020-11-27 20:10:17
        文檔

        JavaScript原生實現觀察者模式的示例_javascript技巧

        觀察者模式又叫做發布訂閱模式,它定義了一種一對多的關系,讓多個觀察者對象同時監聽某一個主題對象,這個主題對象的狀態發生改變時就會通知所有觀察著對象。它是由兩類對象組成,主題和觀察者,主題負責發布事件,同時觀察者通過訂閱這些事件來觀察該主體,發布者和訂閱者是完全解耦的,彼此不知道對方的存在,兩者僅僅共享一個自定義事件的名稱。在Nodejs中通過EventEmitter實現了原生的對于這一模式的支持。在JavaScript中事件監聽機制就可以理解為一種觀察者模式。通過onclick進行事件綁定,然后通過交互行為進行觸發或者事件主動觸發。下面給出一個JS自定義的PubSub,仔細閱讀下面這段代碼有助于你理解觀察者模式。一、定義觀察者類Pubsub。
        推薦度:
        導讀觀察者模式又叫做發布訂閱模式,它定義了一種一對多的關系,讓多個觀察者對象同時監聽某一個主題對象,這個主題對象的狀態發生改變時就會通知所有觀察著對象。它是由兩類對象組成,主題和觀察者,主題負責發布事件,同時觀察者通過訂閱這些事件來觀察該主體,發布者和訂閱者是完全解耦的,彼此不知道對方的存在,兩者僅僅共享一個自定義事件的名稱。在Nodejs中通過EventEmitter實現了原生的對于這一模式的支持。在JavaScript中事件監聽機制就可以理解為一種觀察者模式。通過onclick進行事件綁定,然后通過交互行為進行觸發或者事件主動觸發。下面給出一個JS自定義的PubSub,仔細閱讀下面這段代碼有助于你理解觀察者模式。一、定義觀察者類Pubsub。
        下面小編就為大家分享一篇JavaScript原生實現觀察者模式的示例,JavaScript源碼,對JavaScript感興趣的一起跟隨小編過來看看吧

        觀察者模式又叫做發布訂閱模式,它定義了一種一對多的關系,讓多個觀察者對象同時監聽某一個主題對象,這個主題對象的狀態發生改變時就會通知所有觀察著對象。 它是由兩類對象組成,主題和觀察者,主題負責發布事件,同時觀察者通過訂閱這些事件來觀察該主體,發布者和訂閱者是完全解耦的,彼此不知道對方的存在,兩者僅僅共享一個自定義事件的名稱。

        在Nodejs中通過EventEmitter實現了原生的對于這一模式的支持。

        在JavaScript中事件監聽機制就可以理解為一種觀察者模式。通過onclick進行事件綁定,然后通過交互行為進行觸發或者事件主動觸發。

        下面給出一個JS自定義的PubSub,仔細閱讀下面這段代碼有助于你理解觀察者模式。

        一、定義觀察者類Pubsub

        /* Pubsub */
         function Pubsub(){
         //存放事件和對應的處理方法
         this.handles = {};
         }

        二、實現事件訂閱on

        //傳入事件類型type和事件處理handle
         on: function (type, handle) {
         if(!this.handles[type]){
         this.handles[type] = [];
         }
         this.handles[type].push(handle);
         }

        三、實現事件發布emit

        emit: function () {
         //通過傳入參數獲取事件類型
         var type = Array.prototype.shift.call(arguments);
         if(!this.handles[type]){
         return false;
         }
         for (var i = 0; i < this.handles[type].length; i++) {
         var handle = this.handles[type][i];
         //執行事件
         handle.apply(this, arguments);
         }
         }

        需要說明的是Array.prototype.shift.call(arguments)這句代碼,arguments對象是function的內置對象,可以獲取到調用該方法時傳入的實參數組。

        shift方法取出數組中的第一個參數,就是type類型。

        四、實現事件取消訂閱off

        off: function (type, handle) {
         handles = this.handles[type];
         if(handles){
         if(!handle){
         handles.length = 0;//清空數組
         }else{
         for (var i = 0; i < handles.length; i++) {
         var _handle = handles[i];
         if(_handle === handle){
         handles.splice(i,1);
         }
         }
         }
         }
         }

        完整代碼:

        /* Pubsub */
         function Pubsub(){
         //存放事件和對應的處理方法
         this.handles = {};
         }
         Pubsub.prototype={
         //傳入事件類型type和事件處理handle
         on: function (type, handle) {
         if(!this.handles[type]){
         this.handles[type] = [];
         }
         this.handles[type].push(handle);
         },
         emit: function () {
         //通過傳入參數獲取事件類型
         var type = Array.prototype.shift.call(arguments);
         if(!this.handles[type]){
         return false;
         }
         for (var i = 0; i < this.handles[type].length; i++) {
         var handle = this.handles[type][i];
         //執行事件
         handle.apply(this, arguments);
         }
         },
         off: function (type, handle) {
         handles = this.handles[type];
         if(handles){
         if(!handle){
         handles.length = 0;//清空數組
         }else{
         for (var i = 0; i < handles.length; i++) {
         var _handle = handles[i];
         if(_handle === handle){
         handles.splice(i,1);
         }
         }
         }
         }
         }
         }

        五、測試

        var p1 = new Pubsub();
         p1.on('mm', function (name) {
         console.log('mm: '+ name);
         });
         p1.emit('mm','哈哈哈哈');
        console.log('===============');
         var p2 = new Pubsub();
         var fn = function (name) {
         console.log('mm2: '+ name);
         };
         var fn2 = function (name) {
         console.log('mm222: '+ name);
         };
         p2.on('mm2', fn);
         p2.on('mm2', fn2);
         p2.emit('mm2','哈2哈2哈2哈2');
         console.log('-------------');
        p2.off('mm2', fn);
         p2.emit('mm2','哈2哈2哈2哈2');
         console.log('-------------');
        p2.off('mm2');
         p2.emit('mm2','哈2哈2哈2哈2');
         console.log('-------------');

        以上這篇JavaScript原生實現觀察者模式的示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家PHP中文網。

        相關推薦:

        JavaScript觀察者模式定義和dom事件實例詳解

        javascript觀察者模式定義、場景實例代碼詳解

        分析javascript觀察者模式的原理、功能

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

        文檔

        JavaScript原生實現觀察者模式的示例_javascript技巧

        觀察者模式又叫做發布訂閱模式,它定義了一種一對多的關系,讓多個觀察者對象同時監聽某一個主題對象,這個主題對象的狀態發生改變時就會通知所有觀察著對象。它是由兩類對象組成,主題和觀察者,主題負責發布事件,同時觀察者通過訂閱這些事件來觀察該主體,發布者和訂閱者是完全解耦的,彼此不知道對方的存在,兩者僅僅共享一個自定義事件的名稱。在Nodejs中通過EventEmitter實現了原生的對于這一模式的支持。在JavaScript中事件監聽機制就可以理解為一種觀察者模式。通過onclick進行事件綁定,然后通過交互行為進行觸發或者事件主動觸發。下面給出一個JS自定義的PubSub,仔細閱讀下面這段代碼有助于你理解觀察者模式。一、定義觀察者類Pubsub。
        推薦度:
        標簽: 技巧 js 示例
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲精品乱码久久久久久蜜桃| www在线观看免费视频| 一级毛片不卡片免费观看| 亚洲精品美女久久久久99| 久99久无码精品视频免费播放| 国产美女精品视频免费观看| 亚洲色大成WWW亚洲女子| 我想看一级毛片免费的| 亚洲色大成网站www久久九| 国产免费卡一卡三卡乱码 | 亚洲第一页日韩专区| 亚洲国产精品18久久久久久| 又大又粗又爽a级毛片免费看| 亚洲夂夂婷婷色拍WW47| 国产成人无码a区在线观看视频免费 | 毛片a级三毛片免费播放| 亚洲国语精品自产拍在线观看| 不卡视频免费在线观看| 国产亚洲美女精品久久久久狼| baoyu777永久免费视频| 91亚洲va在线天线va天堂va国产| 性xxxx视频免费播放直播| 亚洲午夜电影一区二区三区| 日韩黄色免费观看| 一级一级一片免费高清| 亚洲黄色免费网站| 日韩一区二区在线免费观看 | 亚洲国产精品免费在线观看| 成人免费视频软件网站| 日韩精品无码免费视频| 国产精一品亚洲二区在线播放| 日韩视频在线观看免费| 日韩亚洲国产综合高清| 国产偷窥女洗浴在线观看亚洲 | 香蕉视频亚洲一级| 亚洲av永久无码精品国产精品 | 精品久久久久久久免费加勒比| 成人婷婷网色偷偷亚洲男人的天堂| 亚洲第一福利网站在线观看| aⅴ在线免费观看| 日韩在线一区二区三区免费视频 |