z-util-page
Version:
101 lines (100 loc) • 2.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventBus = void 0;
const mergeObject_1 = require("../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);
* ```
*/
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 = (0, mergeObject_1.mergeObject)({
maxEventCount: 10000
}, EventBus.config, config || {});
this.bucket = {};
this.on = EventBus.on;
this.emit = EventBus.emit;
}
}
exports.EventBus = EventBus;
Object.defineProperty(EventBus, "config", {
enumerable: true,
configurable: true,
writable: true,
value: {}
});
Object.defineProperty(EventBus, "bucket", {
enumerable: true,
configurable: true,
writable: true,
value: {}
});