¡buenas!
no tengo muy claro de lo que exactamente quieres hacer. supongo que te refieres a
this de tu clase
miClase. hasta donde conozco, hay una forma pero es dependiente de la implementación javascript. resulta que a los eventos, en lugar de un handler (manejador) le puedes pasar un objeto. entonces, si el objeto tiene el método
handleEvent, este se utilizará como handler del evento. pero como mencione, depende mucho de la implementación de javascript. por ejemplo, chrome me acepta dicha implementación en los eventos como propiedades (DOM Event 0) pero firefox no:
Código:
document.body.onclick = { // objeto literal;
handleEvent: function(){ // el handler
console.log(this, arguments);
// en la consola obtienes el objeto literal;
// y los argumentos pasados al handler cuando se invoca;
}}
para que este mismo método funcione en firefox tienes que utilizar addEventListener en lugar de DOM Event 0.
Código:
document.body.addEventListener('click', { // objeto literal como en el ejemplo anterior;
handleEvent: function(){
console.log(this, arguments);
}
}, true);
¿cómo implementas eso utilizando constructores (clases, para algunos)? simplemente creas el método del constructor como regularmente lo harías y luego registras la referencia
this como handler.
Código:
function Fn(){
...
this.handleEvent = function(){ ... };
this.element.addEventListener('eventType', this, captureMode);
}
desgraciadamente, ninguno de los modelos anteriores funciona en iexplorer (no he comprobado en las versiones 9 y 10), simplemente porque iexplorer utiliza un modelo de eventos distinto al estándar. de existir soluciones alternas, los hay... aunque tengo duda de cual sería la mejor forma. una posibilidad podría ser crear un closure de una referencia a la instancia del constructor. en el handler, en lugar de usar
this utilizas la variable.
Código:
function Fn(){
var that = this;
this.handler = function(){
that; // se crea un closure, that hace referencia a la instancia creada
...
};
this.element.eventType = this.handler;
// no confundir handler con handleEvent;
// lo mismo se puede hacer con addEventListener
}
otra posibilidad parecida a la anterior es asignarle un nombre al método y luego crear una propiedad (las funciones en javascript son como objetos) con la referencia a la instancia. dentro del handler utilizas el nombre para hacer referencia a la función misma y luego a la propiedad.
Código:
function Fn(){
this.handler = function Handler(){ // en este ejemplo la función "anónima" tiene por nombre "Handler";
Handler.that; // hace referencia a la instancia;
};
this.handler.that = this; // la propiedad a la función;
this.element.eventType = this.handler;
}
para mis gustos, no es tan cómodo como la primera alternativa ya que puedes usar directamente
this. seguro hay más opciones, pero estas son de las que puedo pensar por el momento.