国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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技巧

來源:懂視網 責編:小采 時間:2020-11-27 21:27:29
文檔

JavaScript設計模式之觀察者模式(發布者-訂閱者模式)_javascript技巧

JavaScript設計模式之觀察者模式(發布者-訂閱者模式)_javascript技巧:觀察者模式( 又叫發布者-訂閱者模式 )應該是最常用的模式之一. 在很多語言里都得到大量應用. 包括我們平時接觸的dom事件. 也是js和dom之間實現的一種觀察者模式. 代碼如下: div.onclick = function click (){ alert ( click' ) }
推薦度:
導讀JavaScript設計模式之觀察者模式(發布者-訂閱者模式)_javascript技巧:觀察者模式( 又叫發布者-訂閱者模式 )應該是最常用的模式之一. 在很多語言里都得到大量應用. 包括我們平時接觸的dom事件. 也是js和dom之間實現的一種觀察者模式. 代碼如下: div.onclick = function click (){ alert ( click' ) }

觀察者模式( 又叫發布者-訂閱者模式 )應該是最常用的模式之一. 在很多語言里都得到大量應用. 包括我們平時接觸的dom事件. 也是js和dom之間實現的一種觀察者模式.

代碼如下:
div.onclick = function click (){
alert ( ”click' )
}

只要訂閱了div的click事件. 當點擊div的時候, function click就會被觸發。

那么到底什么是觀察者模式呢. 先看看生活中的觀察者模式。

好萊塢有句名言. “不要給我打電話, 我會給你打電話”. 這句話就解釋了一個觀察者模式的來龍去脈。 其中“我”是發布者, “你”是訂閱者。

再舉個例子,我來公司面試的時候,完事之后每個面試官都會對我說:“請留下你的聯系方式, 有消息我們會通知你”。 在這里“我”是訂閱者, 面試官是發布者。所以我不用每天或者每小時都去詢問面試結果, 通訊的主動權掌握在了面試官手上。而我只需要提供一個聯系方式。

觀察者模式可以很好的實現2個模塊之間的解耦。 假如我正在一個團隊里開發一個html5游戲. 當游戲開始的時候,需要加載一些圖片素材。加載好這些圖片之后開始才執行游戲邏輯. 假設這是一個需要多人合作的項目. 我完成了Gamer和Map模塊, 而我的同事A寫了一個圖片加載器loadImage。

loadImage的代碼如下:
代碼如下:
loadImage( imgAry, function(){
Map.init();
Gamer.init();
} )

當圖片加載好之后, 再渲染地圖, 執行游戲邏輯. 嗯, 這個程序運行良好. 突然有一天, 我想起應該給游戲加上聲音功能. 我應該讓圖片加載器添上一行代碼.
代碼如下:
loadImage( imgAry, function(){
Map.init();
Gamer.init();
Sount.init();
} )

可是寫這個模塊的同事A去了外地旅游. 于是我打電話給他, 喂. 你的loadImage函數在哪, 我能不能改一下, 改了之后有沒有副作用. 如你所想, 各種不淡定的事發生了. 如果當初我們能這樣寫呢:
代碼如下:
loadImage.listen( ”ready', function(){
Map.init();
})
loadImage.listen( ”ready', function(){
Gamer.init();
})
loadImage.listen( ”ready', function(){
Sount.init();
})

loadImage完成之后, 它根本不關心將來會發生什么, 因為它的工作已經完成了. 接下來它只要發布一個信號.

代碼如下:
loadImage.trigger( ”ready' );

那么監聽了loadImage的'ready'事件的對象都會收到通知. 就像上個面試的例子. 面試官根本不關心面試者們收到面試結果后會去哪吃飯. 他只負責把面試者的簡歷搜集到一起. 當面試結果出來時照著簡歷上的電話挨個通知.

說了這么多概念, 來一個具體的實現. 實現過程其實很簡單. 面試者把簡歷扔到一個盒子里, 然后面試官在合適的時機拿著盒子里的簡歷挨個打電話通知結果.

代碼如下:
Events = function() {
var listen, log, obj, one, remove, trigger, __this;
obj = {};
__this = this;
listen = function( key, eventfn ) { //把簡歷扔盒子, key就是聯系方式.
var stack, _ref; //stack是盒子
stack = ( _ref = obj[key] ) != null ? _ref : obj[ key ] = [];
return stack.push( eventfn );
};
one = function( key, eventfn ) {
remove( key );
return listen( key, eventfn );
};
remove = function( key ) {
var _ref;
return ( _ref = obj[key] ) != null ? _ref.length = 0 : void 0;
};
trigger = function() { //面試官打電話通知面試者
var fn, stack, _i, _len, _ref, key;
key = Array.prototype.shift.call( arguments );
stack = ( _ref = obj[ key ] ) != null ? _ref : obj[ key ] = [];
for ( _i = 0, _len = stack.length; _i < _len; _i++ ) {
fn = stack[ _i ];
if ( fn.apply( __this, arguments ) === false) {
return false;
}
}
return {
listen: listen,
one: one,
remove: remove,
trigger: trigger
}
}

最后用觀察者模式來做一個成人電視臺的小應用.

代碼如下:
//訂閱者
var adultTv = Event();
adultTv .listen( ”play', function( data ){
alert ( “今天是誰的電影” + data.name );
});
//發布者
adultTv .trigger( ”play', { ‘name': ‘麻生希' } )

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

文檔

JavaScript設計模式之觀察者模式(發布者-訂閱者模式)_javascript技巧

JavaScript設計模式之觀察者模式(發布者-訂閱者模式)_javascript技巧:觀察者模式( 又叫發布者-訂閱者模式 )應該是最常用的模式之一. 在很多語言里都得到大量應用. 包括我們平時接觸的dom事件. 也是js和dom之間實現的一種觀察者模式. 代碼如下: div.onclick = function click (){ alert ( click' ) }
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲欧美日韩在线 | 自拍偷自拍亚洲精品被多人伦好爽 | 国产在线高清视频 | 欧美色图亚洲自拍 | 欧美日韩小视频 | 激情午夜婷婷 | 欧美第一精品 | 日韩欧美一区二区三区在线播放 | 欧美日韩亚洲一区二区三区 | 国产一区二区三区高清 | 欧美三级精品 | 在线观看国产欧美 | 无毛片| 午夜欧美性视频在线播放 | 亚洲精品乱码久久久久久v 亚洲精品免费观看 | 91视频一区二区 | 国内一区二区三区精品视频 | 亚洲欧美二区三区久本道 | 久久成人国产精品二三区 | 亚洲欧美综合网站 | 日韩高清第一页 | 久久91精品国产99久久yfo | 香蕉乱码成人久久天堂爱免费 | 亚洲国产成人综合精品2020 | 中文字幕精品一区二区精品 | 国产精品免费观看网站 | 欧美日韩有码 | 亚洲第8页 | 一区二区视频 | 亚洲精品午夜国产va久久成人 | 国产精品一二三区 | 日本一道在线 | 精品日韩欧美一区二区三区 | 日韩性视频 | 美日韩一区二区三区 | 国产1页| 亚洲国产欧美另类 | 国产综合精品久久久久成人影 | 欧美日在线观看 | 国产成人一区二区三区免费观看 | 九九国产精品视频 |