写一个eventEmitter类,包括on()、off()、once()、emit()方法

写一个eventEmitter类,包括on()、off()、once()、emit()方法

1.on(event, fn) 监听event 事件,事件触发时调用fn函数;
2.once(event, fn) 为指定事件注册一个单次监听器,单次监听器最多只触发一次,触发后立即解除监听器;

3.emit(event, arg1, arg2, arg3, …): 触发event事件,并把参数arg1, arg2, arg3… 传给事件处理函数;
4.off (event, fn) 停止监听某个事件

class EventEmitter{
    constructor(){
        this._events={}
    }
    on(event,callback){
        let callbacks = this._events[event] || []
        
        this._events[event] = callbacks.push(callback);
        return this
    }
    off(event,callback){
        let callbacks = this._events[event]
        this._events[event] =  callbacks && callbacks.filter(function(fn){
               return fn !== callback;
        })
        return this
    }
    emit(eventName,...args) {
         const callbacks = this._events[eventName]
         callbacks.map(cb => {
              cb(...args)
         })
         return this;
    }
    once(event,callback){
        let wrap = (...args) => {
            callback.apply(this, args)
            this.off(event, wrap)
        }
        this.on(event, wrap )
        return this
    }
}


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值