请实现一个EventEmitter
在前端开发中,EventEmitter 是一个非常常见的概念,特别是在 Node.js 和一些前端框架(如 Angular,Vue.js 中的事件系统等)中。以下是一个简单的 EventEmitter 类的实现,使用 JavaScript 编写:
class EventEmitter {
constructor() {
this.events = {};
}
// 监听事件
on(eventName, callback) {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(callback);
}
// 触发事件
emit(eventName, ...args) {
if (this.events[eventName]) {
this.events[eventName].forEach(callback => {
callback(...args);
});
}
}
// 移除事件监听器
off(eventName, callback) {
if (this.events[eventName]) {
this.events[eventName] = this.events[eventName].filter(cb => cb !== callback);
}
}
}
这个 EventEmitter 类有以下方法:
on(eventName, callback): 用于注册一个事件监听器。当指定的事件被触发时,将调用提供的回调函数。emit(eventName, ...args): 用于触发一个事件。所有注册到该事件的回调函数都将被调用,并传入提供的参数。off(eventName, callback): 用于移除一个事件监听器。这将从指定事件的监听器列表中删除提供的回调函数。
你可以这样使用这个 EventEmitter 类:
const eventEmitter = new EventEmitter();
// 监听一个名为 'message' 的事件
eventEmitter.on('message', (message) => {
console.log('Received message:', message);
});
// 触发 'message' 事件,并传入一个字符串参数
eventEmitter.emit('message', 'Hello, World!'); // 输出: Received message: Hello, World!
浙公网安备 33010602011771号