日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JavaScript觀察者模式原理與用法實例詳解

瀏覽:217日期:2023-11-07 18:26:02

本文實例講述了JavaScript觀察者模式原理與用法。分享給大家供大家參考,具體如下:

觀察者模式觀察者模式又叫發布訂閱模式(Publish/Subscribe),它定義了一種一對多的關系,讓多個觀察者對象同時監聽某一個主題對象,這個主題對象的狀態發生變化時就會通知所有的觀察者對象,使得它們能夠自動更新自己。* 它分為2個角色:(1)觀察者 (2)被觀察者

* 觀察者模式的目的:對程序的內在變化進行觀察,當其有變化的時候,你可以得知,并且可以做出相應的反應。現在我們通過一個需求來學習該模式:模擬訂閱者和報社之間的關系

在這個過程中:實際的操作分為(推模式,拿模式)

(1)推送-->長連接技術(2)拿模式-->定時去后臺去取得使用代碼實現如下:(1)發布類

//發布類function BusinessOne(name){ this.name=name; //訂閱者集合 this.subscribers=new Array();}

(2)擴展一個發布者的發布消息的方法(推模式)

//發布者的發送消息的方法(推模式)BusinessOne.prototype.delive=function (news) { var self=this; //給每一個訂閱者發布消息 this.subscribers.forEach(function (fn) { //調用接受者處理信息的函數 fn(news,self); })}

(3)擴展公共訂閱的函數,和取消訂閱的函數

訂閱的函數:

Function.prototype.subscribe=function (publisher) { var that=this; //some 訪問數組度i型并且以參數的形式傳回回調函數中 //只要至少有一次返回是true那么some就是true var alreadyExists=publisher.subscribers.some(function (el) { if(el==that){ //處理不能重復訂閱的功能 return ; } }); //沒用訂閱你就可以訂閱 if(!alreadyExists){ publisher.subscribers.push(that); } return this;}

取消的函數:

Function.prototype.unsubscribe =function (publisher) { var that = this; publisher.subscribers=publisher.subscribers.filter(function (el) {//過濾的實質是返回除開與當前對象相等的其余所用的對象集合 if(el!==that){ return el; } }); return this;}

(4)創建發布的實例

//創建發布者的實例var b1 = new BusinessOne('CCTV');var b2 = new BusinessOne('中國國防部報社');

(5)發布部分

(5.1)使用門面模式--針對各瀏覽器的事件綁定兼容問題

function addEventFacade(el,type,fn) { if(window.addEventListener){ //firefox el.addEventListener(type,fn); }else if(window.attachEvent){ //使用是IE el.attachEvent('on'+type,fn); }else { el['on'+type] = fn; }}

(5.2)創建主應用函數

var inint=function () { //創建觀察者 var pageOne=function (news) { document.getElementById('info').value='我發現了: '+'['+arguments[1].name+']發來的信息--->'+news }; //訂閱1 pageOne.subscribe(b1).subscribe(b2); addEventFacade(document.getElementById('cctv'),'click',function () { b1.delive(document.getElementById('cctvText').value); }) //訂閱2 addEventFacade(document.getElementById('gfb'),'click',function () { b2.delive(document.getElementById('gfbText').value); })}

最后,訂閱者界面

<body onload='inint()'><div id='div01'></div><script type='text/javascript' src='http://m.b3g6.com/bcjs/observer.js'></script><input type='button' value='CCTV發送' id='cctv'><input type='text' id='cctvText'><br><br><br><input type='button' value='國防部報社發送' id='gfb'><input type='text' id='gfbText'><br><br><br><textarea cols='60' rows='20'></textarea><script src='http://m.b3g6.com/bcjs/Js/設計模式第三部分/觀察者模式/lib.js'></script><script src='http://m.b3g6.com/bcjs/Js/設計模式第三部分/觀察者模式/觀察者模式.js'></script></body>

效果為:

(1)cctv模塊的

JavaScript觀察者模式原理與用法實例詳解

(2)gfb的效果為:

JavaScript觀察者模式原理與用法實例詳解

補充:上述用到的forEach方法和filter方法代碼為:

Function.prototype.method = function(name, fn) { this.prototype[name] = fn; return this; }; if (!Array.prototype.forEach) { Array.method(’forEach’, function(fn, thisObj) { var scope = thisObj || window; for ( var i = 0;len < this.length; ++i ) { //這樣寫不是簡單的函數調用,是在函數調用的同事把this重新定位 fn.call(scope, this[i], i, this); } }); } //Array過濾器 if (!Array.prototype.filter ) { Array.method(’filter’, function(fn, thisObj) { var scope = thisObj || window; var a = []; for ( var i = 0;i < this.length; ++i ) { //看看過濾函數,真留下來,假的刪除 if ( !fn.call(scope, this[i], i, this) ) {//過濾的實質是返回除開與當前對象相等的其余所用的對象集合 continue; } a.push(this[i]); } //返回新的數組 return a; }); }

總結:

JavaScript觀察者模式原理與用法實例詳解

1.支持簡單的廣播通信,自動通知所有的監聽者。2.當頁面載入后,被觀察對象很容易與觀察者有一種動態關聯的關系,來增加靈活性。3.被觀察對象,與觀察者之間的抽象耦合關系能夠單獨的擴展和重用。

感興趣的朋友可以使用在線HTML/CSS/JavaScript前端代碼調試運行工具:http://tools.jb51.net/code/WebCodeRun測試上述代碼運行效果。

更多關于JavaScript相關內容還可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

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

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩深夜视频| 国产videos久久| 麻豆精品蜜桃视频网站| 欧美天堂在线| 麻豆成人在线观看| 国产日韩中文在线中文字幕| 日韩va欧美va亚洲va久久| 久久亚州av| 四虎4545www国产精品| 亚洲精品一二三区区别| 美女久久一区| 日韩三级一区| 精品久久久网| 精品国产亚洲一区二区三区大结局| 国产精品玖玖玖在线资源| 久久男人av资源站| 群体交乱之放荡娇妻一区二区| 日本欧美国产| 中文在线日韩| 另类综合日韩欧美亚洲| 国产精品久久国产愉拍| 国产精品成人**免费视频| 国产精品嫩模av在线| 亚洲午夜91| 日韩av中文字幕一区二区三区| 日本亚洲欧洲无免费码在线| 日本成人一区二区| 国产乱码精品一区二区三区亚洲人 | 精品在线网站观看| 日韩理论视频| 日韩中文字幕av电影| 欧美国产精品| 久久一区欧美| 99久久精品费精品国产| 国产精品v日韩精品v欧美精品网站| 国产精品99久久久久久董美香| 国产一区二区三区视频在线| 久久久人人人| 日韩视频一二区| 精品一区av| 国内亚洲精品| 奇米狠狠一区二区三区| 国产a久久精品一区二区三区| 五月精品视频| 亚洲国产欧美日本视频| 成人av二区| 日本在线成人| 日产精品一区| 日韩精品午夜视频| www.51av欧美视频| 久久av一区| 国产精品观看| 妖精视频成人观看www| 亚洲精品永久免费视频| 国产视频一区三区| 青草av.久久免费一区| 日韩高清欧美| 日本精品国产| 婷婷激情久久| 国产精品久久久久久久久久白浆| 成人av动漫在线观看| 国产精品视频一区二区三区| 亚州av乱码久久精品蜜桃| 国产精品麻豆成人av电影艾秋| 午夜欧美视频| 鲁大师精品99久久久| 99视频在线精品国自产拍免费观看| 国产精品成人国产| 99亚洲视频| 亚洲啊v在线| 日本成人在线不卡视频| 精品一区在线| 免费一级欧美片在线观看网站| 日韩视频二区| 久久女人天堂| 日日夜夜免费精品视频| 日韩制服丝袜av| 精品国产a一区二区三区v免费| 中文无码久久精品| 99久久久久国产精品| 麻豆91在线播放| 日韩精品三级| 99热精品在线观看| 日韩欧美国产精品综合嫩v| 日韩高清一区二区| 韩国久久久久久| 国产精品嫩草影院在线看| 最新亚洲国产| 婷婷综合网站| 韩国三级一区| 精品久久久网| 欧美国产极品| 奇米亚洲欧美| 亚洲精品动态| 国产视频一区三区| 激情综合亚洲| 成人精品亚洲| 日韩精品永久网址| 精品日本视频| 国产毛片一区二区三区| 视频一区二区三区入口| 香蕉精品视频在线观看| 久久亚洲精品中文字幕蜜潮电影| 国产伊人久久| 精品一区二区三区在线观看视频| 日韩不卡在线观看日韩不卡视频| 日韩一区二区免费看| 日韩不卡视频在线观看| 国产成人精品亚洲线观看| 国产精品免费99久久久| 91精品麻豆| 日本免费在线视频不卡一不卡二| 亚洲综合中文| 蜜桃av一区二区| 亚洲一区二区三区四区电影 | 国产精品久久久久av电视剧| 麻豆久久一区| 麻豆精品国产91久久久久久| 国产乱码精品| 国产精久久久| 国产精品a级| 麻豆中文一区二区| 久久香蕉网站| 高清精品久久| 国产精品xx| 国产欧美一区二区三区精品酒店| 国产在线看片免费视频在线观看| 麻豆国产在线| 日本黄色精品| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 欧美日韩午夜电影网| 三级久久三级久久久| 日韩福利视频导航| 国产调教精品| 久久精品午夜| 中文字幕在线看片| 91精品啪在线观看国产18| 亚洲国产专区校园欧美| 国产亚洲午夜| 日本伊人久久| 国产欧美日韩在线观看视频| 免费日韩一区二区三区| 欧美丰满日韩| 婷婷丁香综合| 三级在线观看一区二区| 日本成人精品| 激情中国色综合| 久久精品免费一区二区三区| 国产综合精品一区| 免费看黄色91| 国产精品3区| 欧洲在线一区| 视频一区欧美日韩| 国产精品一区二区中文字幕| 国产a久久精品一区二区三区| 亚洲成人va| 日韩中文字幕亚洲一区二区va在线 | 99精品在线免费在线观看| 亚洲欧洲日本mm| 青草久久视频| 国产精品黑丝在线播放| 亚洲网站视频| 亚洲1区在线观看| 久久精品一区二区三区中文字幕| 亚洲美女久久精品| 免费人成精品欧美精品| 国产经典一区| 国产99久久| 最新亚洲国产| 国产中文在线播放| 亚洲免费网址| 久久超级碰碰| 五月精品视频| 国产精品一区高清| 国产99精品| 欧美午夜三级| 蜜桃一区二区三区| 日韩精品成人在线观看| 狠狠躁少妇一区二区三区| 国产亚洲一区在线| 麻豆国产精品一区二区三区 | 国产va在线视频| 乱人伦精品视频在线观看| 国产毛片精品久久| 不卡一区2区| 国产精品白丝av嫩草影院| 亚洲精品在线观看91| 国产亚洲人成a在线v网站| 日韩精品欧美| 欧美亚洲福利| 欧美日韩国产免费观看视频| 国产剧情在线观看一区| 91成人精品| 国内精品美女在线观看| 亚洲精品少妇| 99视频精品视频高清免费| 日韩动漫一区| 欧美高清一区| 成人国产精选| 欧美亚洲网站|