在前端开发中,EventEmitter 是一种常用的设计模式,它允许事件的发送者与接收者解耦。下面是一个简单的 EventEmitter 类的实现,使用了 JavaScript:
class EventEmitter {
constructor() {
this.events = {};
}
// 注册事件监听器
on(eventName, listener) {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(listener);
}
// 移除事件监听器
off(eventName, listener) {
if (this.events[eventName]) {
this.events[eventName] = this.events[eventName].filter(l => l !== listener);
}
}
// 触发事件,执行所有注册到该事件的监听器
emit(eventName, ...args) {
if (this.events[eventName]) {
this.events[eventName].forEach(listener => {
listener(...args);
});
}
}
// 移除所有事件的所有监听器
removeAllListeners() {
this.events = {};
}
}
// 使用示例:
const emitter = new EventEmitter();
function listener1() {
console.log('listener1 executed');
}
function listener2() {
console.log('listener2 executed');
}
// 注册监听器
emitter.on('event1', listener1);
emitter.on('event1', listener2);
// 触发事件
emitter.emit('event1'); // 输出:listener1 executed, listener2 executed
// 移除监听器
emitter.off('event1', listener1);
emitter.emit('event1'); // 输出:listener2 executed
// 移除所有监听器
emitter.removeAllListeners();
emitter.emit('event1'); // 无输出
这个 EventEmitter 类提供了基本的事件监听和触发功能。你可以通过 on 方法注册监听器,通过 emit 方法触发事件,通过 off 方法移除监听器,以及通过 removeAllListeners 方法移除所有监听器。
来源链接:https://www.cnblogs.com/ai888/p/18665612










没有回复内容