class HYEventBus {
constructor() {
this.eventCallbackFns = {};
}
on(eventName, eventCallback, thisArg) {
let handler = this.eventCallbackFns[eventName];
if (!handler) {
handler = [];
this.eventCallbackFns[eventName] = handler;
}
handler.push({
eventCallback,
thisArg,
});
}
off(eventName, eventCallback) {
let handlers = this.eventCallbackFns[eventName];
if (!handlers) return;
const newHanlder = [...handlers];
for (let i = 0; i < newHanlder.length; i++) {
if (newHanlder[i].eventCallback === eventCallback) {
const index = handlers.indexOf(newHanlder[i]);
handlers.splice(index, 1);
}
}
}
emit(eventName, ...arg) {
const hanlders = this.eventCallbackFns[eventName];
if (!hanlders) return;
hanlders.forEach((hanlder) => {
hanlder.eventCallback.apply(hanlder.thisArg, arg);
});
}
}
const eventBus = new HYEventBus();
const eventHandler = function (payload) {
console.log(payload, this);
};
eventBus.on("aaa", eventHandler, { name: "why" });
eventBus.emit("aaa", 1);
eventBus.off("aaa", eventHandler);
eventBus.emit("aaa", 1);
事件总线实现
最新推荐文章于 2024-10-03 20:14:40 发布