2010-08-02 8 views
9

¿Cuál es la diferencia entre un controlador de eventos y un detector de eventos?JavaScript Event Terminology

Hasta hace poco, consideraba que eran nombres diferentes para la misma cosa: una función que se llama cuando ocurre un evento. Pero leí algo recientemente que se refería al controlador de eventos como el elemento DOM al que estaba vinculado el oyente del evento, lo que tendría sentido.

+0

leen esto también http://stackoverflow.com/questions/6929528/javascript-whats-the-difference-between-event-handlers -listener – decoder

Respuesta

8

Para que quede perfectamente claro, el lenguaje en sí no tiene el concepto de eventos. Estos son parte del 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. 

En el contexto de DOM eventos de la interfaz utilizada es la siguiente:

interface EventListener { 
    void handleEvent(in Event evt); 
}; 

A continuación, se registra un oyente como esto:

target.addEventListener(type, listener, useCapture); 

Aquí está la documentación de 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. 

Parece que los objetos de función implícitamente implementan EventListener para facilitar su uso.

analogías

Piense en Gestor de Eventos como dar las instrucciones cartero.

yo no quiero tener que esperar a que a pasar por lo que yo quiero que entregue el paquete en mi esposo para que puedan abrirlo.

Piense en Procesador de eventos como la espera de ver a su médico.

Voy a estar a la espera de una notificación que esté listo para verme. Hasta entonces leeré una revista.

Al final del día, sin embargo estos son simplemente abstracciones para

Hey, quiero que ejecuta este código!

Recursos

Event Handler

Observer Pattern

+0

@ ChaosPandion - Realmente no me sirve de nada porque está usando un ejemplo de código Java y mi pregunta estaba relacionada con la terminología de JavaScript, pero gracias por tomarse el tiempo para responder. – screenm0nkey

+0

@Nick - Esto es para JavaScript. La documentación DOM simplemente describe la interfaz en términos genéricos. – ChaosPandion

+0

@ ChaosPandion - Doh! Estoy un poco grueso, así que tendrás que perdonarme. – screenm0nkey

3

En el contexto de JavaScript, tiendo a usarlos indistintamente. Creo que la mayoría de los desarrolladores de JavaScript considerarían que significan lo mismo: una función que se llama cuando ocurre un evento en particular. Creo que otros se sentirían confundidos si se refiriera al nodo DOM objetivo del evento como el "controlador de eventos".

EDITAR

"detector de eventos" tiene un significado particular en el DOM Level 2 Events specification. El parámetro listener de los métodos addEventListener y removeEventListener de objetivos de eventos (como elementos) es del tipo EventListener, que se especifica como una interfaz que contiene un único método handleEvent. Sin embargo, al no tener JavaScript concepto de interfaces, en el ECMAScript Binding section, especifica:

EventListener objeto Esta es una referencia a una función ECMAScript. Este método no tiene valor de retorno. El parámetro es un objeto Evento.

Así que en JavaScript, parece claro que un detector de eventos es una función que se llama cuando ocurre un evento.

"Los controladores de eventos" también se mencionan en la Scripts section of the HTML 4.01 specification, que se alude en la (énfasis mío) DOM Level 2 Events specification:

1.3.2. Interacción con los detectores de eventos HTML 4.0 ... Para lograr la compatibilidad con HTML 4.0, los implementadores pueden ver la configuración de los atributos que representan los controladores de eventos como la creación y registro de un EventListener en EventTarget.

Parece claro a partir de esto que los dos términos significan esencialmente lo mismo en el mundo de JavaScript.

+0

Siempre los he usado indistintamente, pero he leído un artículo sobre la delegación de eventos donde una tabla estaba capturando todos los eventos de clic que ocurrieron en ella y se referían a la tabla como el controlador, que luego llamado el oyente del evento. – screenm0nkey

+0

OK. Creo que es un uso inusual. ¿Tienes una URL para ese artículo? –

+0

No. Sé que no es muy útil, pero no puedo encontrar dónde lo leí, ya que fue hace un tiempo. Hice en una lista TODO de cuál era hacer esta pregunta. – screenm0nkey