导出事件总线即导出含on、emit、off方法的单例对象或类实例,推荐默认导出可复用实例,并可命名导出clearAll等辅助函数,需避免副作用、全局挂载及内存泄漏。

JavaScript 中导出事件总线(Event Bus)或消息分发器,本质是导出一个具备 on、emit、off 等方法的对象或类。关键在于:它得是模块内定义的、可复用的实例或构造器,并通过 export 显式暴露出去,供其他模块订阅和触发事件。
导出单例事件总线(推荐初学者)
适合轻量项目,全局共享一个事件中心。直接创建并导出实例:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 定义一个对象,封装事件监听与派发逻辑
- 使用
export default导出该实例,方便统一入口、避免重复初始化
示例(eventBus.js):
export default {
on(event, callback) {
if (!events.has(event)) events.set(event, []);
events.get(event).push(callback);
},
emit(event, ...args) {
const callbacks = events.get(event) || [];
callbacks.forEach(cb => cb(...args));
},
off(event, callback) {
if (!events.has(event)) return;
const list = events.get(event);
const index = list.indexOf(callback);
if (index > -1) list.splice(index, 1);
}
Java免费学习笔记(深入)”;
- 用
export class EventBus或export default class定义 - 类内部维护私有事件映射,保证各实例隔离
示例(EventBus.js):
constructor() {
this.events = new Map();
}
on(event, callback) { /* … */ }
emit(event, ...args) { /* … */ }
off(event, callback) { /* … */ }
export const clearAll = () => { events.clear(); };
export const listenerCount = (event) => events.get(event)?.length || 0;
注意事项与最佳实践
- 避免在模块顶层执行副作用(如自动 emit 初始化事件),保持导出纯净
- 导出的总线不建议挂到全局
window,坚持模块化引用原则 - 若使用 TypeScript,建议为
on/emit添加泛型,提升类型安全 - 生产环境注意内存泄漏:确保
off被调用,或使用 WeakMap 存储回调(高级场景)

















