События в методе
В объекте 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();
});
}
},
};