По-прежнему продолжаю разбираться с кодом сайта Читай-город
Среди файлов нашел Читай-город - интернет-магазин книг_files\eventEmitter.js.Без названия (сохраните страницу на диске)
function EventEmitter(){
var eventSubscribers = {};
//Диспетчирезация события
this.dispatch = function (eventName, payload){
if(eventSubscribers.hasOwnProperty(eventName)){
eventSubscribers[eventName].forEach(function (eventHandler){
eventHandler(payload);
});
}
return true;
};
//Подписка на событие. Возвращает метод отписки handler от события
this.subscribe = function (eventName, handler){
if(typeof handler !== 'function'){
return;
}
if(!eventSubscribers.hasOwnProperty(eventName)){
eventSubscribers[eventName] = [];
}
eventSubscribers[eventName].push(handler);
return function (){
eventSubscribers[eventName] = eventSubscribers[eventName].filter(function (currentHandler) {
return currentHandler !== handler;
});
}
}
}
window.eventEmitter = new EventEmitter();
Возникли вопросы:
- Что такое диспетчерезация события?
- И что означает
Возвращает метод отписки handler от события
?
Особенно меня смущает
this.dispatch = function (eventName, payload){
if(eventSubscribers.hasOwnProperty(eventName)){
eventSubscribers[eventName].forEach(function (eventHandler){
eventHandler(payload);
});
}
А именно цикл forEach, по-моему правильно было бы
this.dispatch = function (eventName, payload){
if(eventSubscribers.hasOwnProperty(eventName)){
eventSubscribers[eventName]=(function (eventHandler){
eventHandler(payload);
});
}
return true;
};</code></pre>
eventSubscribersполучается несколько элементов с одним и тем же полемeventName. – ProgrammerOfParadoxThings Oct 23 '20 at 17:29forEach– ProgrammerOfParadoxThings Oct 23 '20 at 17:54forEach, чтобы вызвать все. АeventHandler- это одна из навешанных функций на это имя события. – Oct 23 '20 at 18:01eventSubscribers[eventName] = [];– Oct 23 '20 at 18:04var eventSubscribers = {};-eventSubscribers- объект (см. 2-ю строку), аeventSubscribers[eventName] = [];- массив.Поэтому вeventSubscribersодному полюeventNameсоответствует несколько функций. – ProgrammerOfParadoxThings Oct 23 '20 at 18:38return function (){eventSubscribers[eventName] = eventSubscribers[eventName].filter(function (currentHandler) {return currentHandler !== handler; });}, то в массив записываются функции, не принадлежащие текущему элементуeventNameв объектеeventSubscribers. – ProgrammerOfParadoxThings Oct 23 '20 at 19:07