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

转载于:https://www.cnblogs.com/bear-blogs/p/9823184.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值