UNPKG

ascor

Version:

一些常用的简单的js工具

61 lines (60 loc) 1.58 kB
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; } }