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;
}
}
eventBus类
最新推荐文章于 2024-02-01 15:59:34 发布
这是一个 JavaScript 的 EventEmitter 类实现,用于事件绑定、监听、一次性执行及移除监听。类中包含了 emit 方法来触发事件,on 方法用于添加事件监听器,once 方法用于添加只执行一次的监听器,而 off 方法则用于移除监听器。类还包含了一个 maxListeners 属性,用于限制同一事件的最大监听数量,超出时会发出警告。
摘要由CSDN通过智能技术生成