亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用JavaScript怎么實現一個觀察者模式

發布時間:2021-04-08 16:50:33 來源:億速云 閱讀:103 作者:Leah 欄目:web開發

本篇文章給大家分享的是有關使用JavaScript怎么實現一個觀察者模式,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一、定義觀察者類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怎么實現一個觀察者模式

以上就是使用JavaScript怎么實現一個觀察者模式,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲水县| 铅山县| 古田县| 健康| 恩施市| 绿春县| 威宁| 大港区| 仙居县| 满洲里市| 赣榆县| 额济纳旗| 九台市| 元朗区| 治多县| 平度市| 冀州市| 定兴县| 三亚市| 浪卡子县| 武城县| 巨鹿县| 纳雍县| 微山县| 申扎县| 吴桥县| 永泰县| 万源市| 嵩明县| 云林县| 清徐县| 抚顺市| 阿鲁科尔沁旗| 延津县| 霍山县| 巴东县| 商河县| 抚顺县| 彩票| 涪陵区| 万荣县|