2010-11-08 7 views
5

Tengo lo que parece ser una situación muy difícil. Me gustaría pasar una instancia de un objeto al oyente de eventos de un elemento DOM que fue creado por esa misma instancia de objeto (si tiene sentido).¿Cómo paso una instancia de clase de JavaScript a un receptor de eventos de DOM?

function Object(callback){ 
    this.callback = callback; 
    this.node = document.createElement('div'); 
    this.send = function(){ 
     document.getElementById('list').appendChild(this.node); 
    } 
    this.node.addEventListener('click',function(){/*this.callback() of Object instance needs to go here*/},true); 
} 

Yo sé que el uso de callback() funcionaría dentro del detector de eventos, pero eso no es lo que necesito, porque me va a utilizar las variables de la instancia que no se transmitan a partir del constructo más adelante.

¿Cómo puedo solucionar esto?

Respuesta

3

La función anónima cambia el significado de este. Para poder utilizarlo dentro del controlador, utilice otro var, o no crear otra función:

var elem = this; 
this.node.addEventListener('click',function(){ elem.callback(); },true); 

o

this.node.addEventListener('click', this.callback, true); 
+0

Una pregunta más, hace elem se evalúan en definición sólo o cuando de nuevo el evento se dispara? Si no, cuando el evento se dispara, ¿hay alguna manera de hacerlo? – livemac

+0

Solo se evalúa cuando se evalúa la función externa. elem se almacena para usarse cuando se activa la devolución de llamada, pero siempre se referirá a la misma instancia; Si cambia la instancia mientras tanto, elem reflejará los cambios (solo hay una vez, no se copia, elem simplemente se convierte en otra referencia). No puedo ver una razón por la cual necesitarías que la tarea se ejecute nuevamente cuando se desate el evento. –

+0

¡Eso es exactamente lo que necesitaba! Muchas gracias – livemac

Cuestiones relacionadas