欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > eventEmitter实现

eventEmitter实现

2025/4/5 19:00:32 来源:https://blog.csdn.net/dashoumeixi/article/details/147003545  浏览:    关键词:eventEmitter实现

没有做任何异常处理,简单模拟实现

  • 事件对象的每一个事件都对应一个数组

/*__events = {"事件1":[cb1,cb2],"事件2":[cb3,cb4],"事件3":[...],"事件4":[...],};*/class E{__events = {};constructor(){}//注册监听回调on(type , callback){//已经有对应事件回调则加入数组if(this.__events[type]){this.__events[type].push(callback);return true;}else{//没有则放入新数组this.__events[type] = [callback];return false;}}// 触发事件emit(type, ...args){if(this.__events[type] && this.__events[type].length){this.__events[type].forEach(cb => {cb.call(this,args);});}}//取消事件对应回调off(type, callback){if(this.__events[type] && this.__events[type].length){this.__events[type] = this.__events[type].filter((cb)=>{return cb !== callback && cb.ref !== callback;})return true;}return false;}//注册一次once(type, callback){let once_func = function(...args){callback.call(this,...args);this.off(type,once_func);}//用于取消 off()once_func.ref = callback;this.on(type,once_func);}
}let obj = new E();function cb (data) { console.log(data);}
obj.on("f1",cb);
obj.off("f1",cb);
obj.emit("f1", 1,2,3,4,5);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词