ascor
Version:
一些常用的简单的js工具
61 lines (60 loc) • 1.58 kB
JavaScript
export class EventEmitter {
constructor() {
this.eventCallback = {};
}
/**
* 添加事件
* @param event 事件名称,字符串
* @param cb 事件回调函数
* @returns EventEmitter
*/
on(event, cb) {
const callbackList = this.eventCallback[event] || [];
callbackList.push(cb);
this.eventCallback[event] = callbackList;
return this;
}
/**
* 取消监听事件
* @param event 事件名称
* @param cb 事件回调函数,不传则取消所有
* @returns
*/
off(event, cb) {
if (!cb) {
this.eventCallback[event] = [];
return this;
}
const callbackList = this.eventCallback[event] || [];
this.eventCallback[event] = callbackList.filter((fn) => fn !== cb);
return this;
}
/**
* 发送事件
* @param event 事件名称,字符串
* @param args 触发时间传递的参数
* @returns
*/
emit(event, ...args) {
const callbackList = this.eventCallback[event] || [];
callbackList.forEach((fn) => {
fn(...args);
});
return this;
}
/**
* 仅触发一次事件,执行完后自动去掉监听
* @param event 事件名称
* @param cb 回调函数
* @returns
*/
once(event, cb) {
// 封装一个单次执行函数
const fn = (...args) => {
cb.apply(this, args);
this.off(event, fn);
};
this.on(event, fn);
return this;
}
}