Задача

Реализуйте класс EventEmitter с методами:

  • on(event, handler) — подписаться;
  • off(event, handler) — отписаться;
  • once(event, handler) — подписаться на один вызов;
  • emit(event, ...args) — вызвать все обработчики события.

Пример

const bus = new EventEmitter();
 
const onMsg = (text) => console.log('got:', text);
bus.on('message', onMsg);
 
bus.emit('message', 'hi'); // got: hi
bus.off('message', onMsg);
bus.emit('message', 'bye'); // (ничего)
 
bus.once('login', (user) => console.log('welcome', user));
bus.emit('login', 'Max'); // welcome Max
bus.emit('login', 'Kate'); // (ничего — once)

Решение

См. также