Υλοποιήστε την κλάση EventEmitter: τη μέθοδο subscribe(event, handler) για εγγραφή σε ένα γεγονός και τη μέθοδο emit(event, data) για την κλήση όλων των συνδρομητών. Επίσης, υλοποιήστε τη μέθοδο unsubscribe.
sobes.tech AI
Απάντηση από AI
javascript class EventEmitter { constructor() { this.events = {}; }
subscribe(event, handler) { if (!this.events[event]) { this.events[event] = new Set(); } this.events[event].add(handler); return { unsubscribe: () => this.unsubscribe(event, handler) }; }
emit(event, data) { if (!this.events[event]) return; for (const handler of this.events[event]) { handler(data); } }
unsubscribe(event, handler) { if (!this.events[event]) return; this.events[event].delete(handler); if (this.events[event].size === 0) { delete this.events[event]; } } }
// Пример использования: const emitter = new EventEmitter(); const sub = emitter.subscribe('message', data => console.log('Получено:', data)); emitter.emit('message', 'Привет!'); // Выведет: Получено: Привет! sub.unsubscribe(); emitter.emit('message', 'Еще раз'); // Ничего не выведет