中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

使用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

遂溪县| 白山市| 延安市| 全椒县| 无棣县| 维西| 炎陵县| 二手房| 新田县| 张北县| 宜丰县| 井陉县| 扶余县| 乐山市| 宝坻区| 辉南县| 伊金霍洛旗| 航空| 衡水市| 准格尔旗| 登封市| 九台市| 南昌市| 浑源县| 平乡县| 且末县| 黄冈市| 昭苏县| 广汉市| 阳泉市| 南部县| 永年县| 商河县| 读书| 茌平县| 陵水| 保定市| 北安市| 嵩明县| 平昌县| 邢台县|