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 发布