• js 实现发布订阅模式


         /* 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 () {
              //通过传入参数获取事件类型
              //将arguments转为真数组
              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);
                  }
                }
              }
            }  
          }
    
    
          let p1 = new Pubsub();
          p1.on('detail', (name)=> {console.log(name)});
          p1.emit('detail', 'observer')
          let p2 = new Pubsub();
          p2.on('detail', (name)=> {console.log(name)});
          p2.emit('detail', 'observer2')
          p2.off('detail');
          p2.emit('detail', 'observer3');

    转自 https://segmentfault.com/a/1190000012430769

  • 相关阅读:
    .Net 第三方工具包整理
    Memcached帮助类
    十八、JavaScript之布尔类型
    十七、JavaScript之幂运算
    十六、JavaScript之%运算符
    十五、JavaScript之除法
    十四、JavaScript之不同类型变量相加
    十三、JavaScript之跨多行的变量申明
    十二、JavaScript之变量申明
    十一、JavaScript之两种注释方法
  • 原文地址:https://www.cnblogs.com/bear-blogs/p/9823184.html
Copyright © 2020-2023  润新知