События в методе

В объекте obj сделайте следующее:

  • В методе subscribe подпишитесь на событие click с помощью EventEmitter.on(eventName, callback). В обработчике нужно увеличивать значение поля count на 1
  • В методе unsubscribe отпишитесь от события click с помощью EventEmitter.off(eventName, callback). В качестве callback нужно передавать тот же самый обработчик, который был передан при подписке.

Я создал функцию, которая прибавляет count, используя this, но count почему-то undefined. вот мой код:

export const obj = {
   count: 0,
   counter() { this.count++ },
   subscribe() {
      EventEmitter.on('click', this.counter)
   },
   unsubscribe() {
      EventEmitter.off('click', this.counter)
   },
};

Вот сам EventEmitter:

export const EventEmitter = {
    handlers: new Map(),
    on(eventName, callback) {
        const existingHandlers = this.handlers.get(eventName);
        if (existingHandlers) {
            existingHandlers.push(callback);
        } else {
            this.handlers.set(eventName, [callback]);
        }
    },
    off(eventName, callback) {
        const existingHandlers = this.handlers.get(eventName);
        if (existingHandlers) {
            const handlerIndex = existingHandlers.find(
                (handler) => handler === callback,
            );
            if (handlerIndex !== -1) {
                existingHandlers.splice(handlerIndex, 1);
            }
            if (existingHandlers.length === 0) {
                this.handlers.delete(eventName);
            }
        }
    },
    emit(eventName) {
        const existingHandlers = this.handlers.get(eventName);
        if (existingHandlers) {
            existingHandlers.forEach((callback) => {
                callback();
            });
        }
    },
};

Ответы (0 шт):