eventBus类

这是一个 JavaScript 的 EventEmitter 类实现,用于事件绑定、监听、一次性执行及移除监听。类中包含了 emit 方法来触发事件,on 方法用于添加事件监听器,once 方法用于添加只执行一次的监听器,而 off 方法则用于移除监听器。类还包含了一个 maxListeners 属性,用于限制同一事件的最大监听数量,超出时会发出警告。
摘要由CSDN通过智能技术生成
 class EventEmitter {
    constructor(max) {
       this.events = {};
       this.maxListeners = max || Infinity;
    }
    // 绑定事件; 
    emit(event, ...args){
       const cbs = this.events[event];
       if (!cbs){
          console.log("没有这个事件");
          return this;
       }
       cbs.forEach(cb => {
          cb.apply(this, args);
       })
       return this;
    }
    //  监听事件;
    on(event, cb) {
       if(!this.events[event]) {
          this.events[event] = [];
       }
       // TODO 拦截最大监听;
       if (this.maxListeners !== Infinity && this.events[event].length >= this.maxListeners) {
          console.warn(`当前事件${event}超过最大监听数`);
       }

       this.events[event].push(cb);
       return this;
    }
    // 只执行一次
    once(event, cb) {
       let wrapFunc = (...args) => {
           this.off(event, func);
           cb.apply(event, func);
       }
       this.on(event, func);
       return this; 
    }
    // 停止监听
    off(event, cb) {
       if (!cb){
          this.events[event] = null;
       } else {
          this.events[event] = this.events[event].filter(item != cb); 
       }
       return this;
    }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值