UNPKG

z-util-page

Version:
97 lines (96 loc) 2.38 kB
import { mergeObject } from "../mergeObject"; /** * @category 事件总线 * @example * ```ts * // 总线 * let count = 0; * EventBus.on('test', function (num, num1) { * count = num + num1; * }) * EventBus.emit('test', 1, 2); * expect(count).toBe(3); * * // 分线 * let count = 0; * const bus = new EventBus(); * bus.on('test', function (num, num1) { * count = num + num1; * }) * bus.emit('test', 3, 4); * expect(count).toBe(7); * ``` */ export class EventBus { /** * 监听事件 * @param key 事件名 * @param func 回调函数 */ static on(key, func) { let funcSet = this.bucket[key]; if (!funcSet) funcSet = this.bucket[key] = []; const re = funcSet.find(item => item === func); if (re || typeof func !== 'function') return; funcSet.push(func); } /** * 触发事件 * @param key 事件名 * @param rest 传给回调函数的参数 */ static emit(key, ...rest) { const funcSet = this.bucket[key]; if (!funcSet) return; funcSet.forEach(function (func) { func(...rest); }); } constructor(config) { Object.defineProperty(this, "config", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "bucket", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "on", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "emit", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.config = mergeObject({ maxEventCount: 10000 }, EventBus.config, config || {}); this.bucket = {}; this.on = EventBus.on; this.emit = EventBus.emit; } } Object.defineProperty(EventBus, "config", { enumerable: true, configurable: true, writable: true, value: {} }); Object.defineProperty(EventBus, "bucket", { enumerable: true, configurable: true, writable: true, value: {} });