Каково различие между обработчиком событий и слушателем события?
До недавнего времени я полагал, что они были различными названиями того же самого: функция, которой это называют, когда событие имеет место. Но я недавно считал что-то, которое назвало обработчик событий элементом DOM, с которым был связан слушатель события, который будет иметь смысл.
Чтобы быть совершенно ясным, сам язык не имеет концепции событий. Это часть модели DOM.
Event Handler: An asynchronous callback that is invoked when an event is raised. Event Listener: An object that implements an interface and has events "pushed" to it.
В контексте событий DOM используется следующий интерфейс:
interface EventListener {
void handleEvent(in Event evt);
};
Затем вы регистрируете слушателя следующим образом:
target.addEventListener(type, listener, useCapture);
Вот документация из MDC :
listener: The object that receives a notification when an event of the specified type occurs. This must be an object implementing the EventListener interface, or simply a JavaScript function.
Это похоже на функцию объекты неявно реализуют EventListener для простоты использования.
Аналогии
Подумайте о Обработчике событий как о предоставлении инструкций почтальону.
Я не хочу ждать тебя зайти, поэтому я хочу, чтобы вы передали пакет моей супруге чтобы они могли его открыть.
Думайте о слушателе событий как о ожидании встречи с врачом.
Я буду ждать уведомления о том, что вы готовы меня видеть. А пока я буду читать журнал.
В конце концов, это просто абстракции для
Эй, я хочу, чтобы вы выполнили этот код!
Ресурсы
В контексте JavaScript я склонен использовать их как взаимозаменяемые. Думаю, большинство разработчиков JavaScript считают, что они означают одно и то же: функцию, которая вызывается при наступлении определенного события. Я и, думаю, другие были бы сбиты с толку, если бы вы назвали целевой узел DOM события "обработчиком события".
EDIT
"Слушатель события" имеет особое значение в спецификации DOM Level 2 Events. Параметр listener
методов addEventListener
и removeEventListener
целей событий (таких как элементы) имеет тип EventListener
, который указан как интерфейс, содержащий единственный метод handleEvent
. Однако JavaScript, не имея понятия об интерфейсах, в разделе ECMAScript Binding указывает:
Object EventListener. Это ссылка на функцию ECMAScript. Этот метод не имеет возвращаемого значения. Параметром является объект Event.
Итак, в JavaScript, кажется, ясно, что слушатель событий - это функция, которая вызывается, когда происходит событие.
"Обработчики событий" также упоминаются в разделе Скрипты спецификации HTML 4.01, на который ссылается спецификация DOM Level 2 Events (выделение мое):
1.3.2. Взаимодействие со слушателями событий HTML 4.0 ... Для достижения совместимости с HTML 4.0 реализаторы могут рассматривать установку атрибутов, представляющих обработчики событий, как создание и регистрацию EventListener на EventTarget.
Отсюда ясно, что в мире JavaScript эти два термина означают по сути одно и то же.