class EventEmitter {
constructor() {
this.events = {};
}
on(type, handler) {
if (!this.events[type]) {
this.events[type] = [];
}
this.events[type].push(handler);
}
emit(type, ...args) {
if (!this.events[type]) {
return;
}
this.events[type].forEach((handler) => {
handler.apply(this, args);
});
}
removeListener(type, handler) {
if (!this.events[type]) {
return;
}
this.events[type] = this.events[type].filter((item) => item !== handler);
}
}
输出:
const bus = new EventEmitter();
bus.on('event', () => {
console.log('Event 1');
});
function event2() {
console.log('Event 2');
}
bus.on('event', event2);
bus.emit('event');
// Output:
// Event 1
// Event 2
bus.removeListener('event', event2);
bus.emit('event');
// Output:
// Event 1