本篇文章給大家分享的是有關(guān)使用JavaScript怎么實現(xiàn)一個觀察者模式,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計、網(wǎng)站制作與策劃設(shè)計,蓮花網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:蓮花等地區(qū)。蓮花做網(wǎng)站價格咨詢:18980820575
一、定義觀察者類Pubsub
/* Pubsub */ function Pubsub(){ //存放事件和對應(yīng)的處理方法 this.handles = {}; }
二、實現(xiàn)事件訂閱on
//傳入事件類型type和事件處理handle on: function (type, handle) { if(!this.handles[type]){ this.handles[type] = []; } this.handles[type].push(handle); }
三、實現(xiàn)事件發(fā)布emit
emit: function () { //通過傳入?yún)?shù)獲取事件類型 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]; //執(zhí)行事件 handle.apply(this, arguments); } }
需要說明的是Array.prototype.shift.call(arguments)這句代碼,arguments對象是function的內(nèi)置對象,可以獲取到調(diào)用該方法時傳入的實參數(shù)組。
shift方法取出數(shù)組中的第一個參數(shù),就是type類型。
四、實現(xiàn)事件取消訂閱off
off: function (type, handle) { handles = this.handles[type]; if(handles){ if(!handle){ handles.length = 0;//清空數(shù)組 }else{ for (var i = 0; i < handles.length; i++) { var _handle = handles[i]; if(_handle === handle){ handles.splice(i,1); } } } } }
完整代碼:
/* Pubsub */ function Pubsub(){ //存放事件和對應(yīng)的處理方法 this.handles = {}; } Pubsub.prototype={ //傳入事件類型type和事件處理handle on: function (type, handle) { if(!this.handles[type]){ this.handles[type] = []; } this.handles[type].push(handle); }, emit: function () { //通過傳入?yún)?shù)獲取事件類型 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]; //執(zhí)行事件 handle.apply(this, arguments); } }, off: function (type, handle) { handles = this.handles[type]; if(handles){ if(!handle){ handles.length = 0;//清空數(shù)組 }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怎么實現(xiàn)一個觀察者模式,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。