2010-08-02 3 views
9

В чем разница между обработчиком событий и прослушивателем событий?JavaScript Event Terminology

До недавнего времени я считал их разными именами для одного и того же: функция, вызываемая при возникновении события. Но я недавно что-то прочитал, ссылаясь на обработчик событий как элемент DOM, к которому был привязан прослушиватель событий, что имеет смысл.

+0

читать это слишком http://stackoverflow.com/questions/6929528/javascript-whats-the-difference-between-event-handlers -listener – decoder

ответ

8

Чтобы быть совершенно ясным, сам язык не имеет понятия о событиях. Это часть 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 для удобства использования.

Аналогии

Придумайте Event Handler как давать почтальону инструкции.

Я не хочу, чтобы ждать, пока вы , чтобы остановить, поэтому я хочу, чтобы вы дали пакет моему супругу , чтобы они могли открыть его.

Образ жизни Слушатель событий как ожидающий увидеть вашего врача.

Я буду слушать уведомление, что вы готовы меня видеть. До тех пор я буду читать журнал.

В конце дня, хотя это просто абстракции для

Эй, я хочу, чтобы вы выполнить этот код!

Ресурсы

Event Handler

Observer Pattern

+0

@ChaosPandion - на самом деле это не помогает мне, поскольку вы используете пример Java-кода, и мой вопрос был связан с терминологией JavaScript, но спасибо, что нашли время ответить. – screenm0nkey

+0

@Nick - это для JavaScript. Документация DOM просто описывает интерфейс в общих терминах. – ChaosPandion

+0

@ChaosPandion - Doh! Я немного толстый, поэтому тебе придется простить меня. – screenm0nkey

3

В контексте JavaScript я стараюсь использовать их взаимозаменяемо. Я думаю, что большинство разработчиков JavaScript рассматривали бы их как одно и то же: функцию, вызываемую при возникновении определенного события. Я и я думаю, что другие будут смущены, если вы указали на целевой объект DOM события как «обработчик событий».

EDIT

"слушатель событий" имеет особое значение в пределах DOM Level 2 Events specification. Параметр listener методов addEventListener и removeEventListener целевых объектов (таких как элементы) имеет тип EventListener, который указан как интерфейс, содержащий один метод handleEvent. Тем не менее, JavaScript, не имея ни малейшего понятия интерфейсов, в ECMAScript Binding section, он указывает:

Объект EventListener Это ссылка функция ECMAScript. Этот метод не имеет возвращаемого значения. Параметр - это объект Event.

Итак, в JavaScript, кажется, что прослушиватель событий - это функция, вызываемая при возникновении события.

"обработчики событий" также упоминается в Scripts section of the HTML 4.01 specification, которая была упомянута в DOM Level 2 Events specification (курсив мой):

1.3.2. Взаимодействие с прослушивателями событий HTML 4.0 ... Для обеспечения совместимости с HTML 4.0 разработчики могут просматривать настройки атрибутов, которые представляют обработчики событий как создание и регистрация EventListener на EventTarget.

Из этого ясно, что эти два термина означают, по сути, одно и то же в мире JavaScript.

+0

Я всегда использовал их взаимозаменяемо, но я читал статью о делегировании событий, где таблица фиксировала все события кликов, которые произошли на ней, и они ссылались на таблицу как на обработчик, который затем называемый слушателем событий. – screenm0nkey

+0

ОК. Я думаю, что это необычное использование. У вас есть URL для этой статьи? –

+0

Нет. Я знаю, что это не очень полезно, но я не могу найти, где я его прочитал, поскольку это было какое-то время назад. Я делаю в списке TODO, который должен был задать этот вопрос. – screenm0nkey