Sobes.tech
Middle

Υλοποιήστε την κλάση 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', 'Еще раз'); // Ничего не выведет