Cita:
Iniciado por zerokilled 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.
¡no se como me pude olvidar! también puedes usar
bind para enlazar el método con la instancia. en teoría es casi como la alternativa del closure, pero con la comodidad de poder utilizar directamente la referencia
this y de no tener que crear manualmente el closure. además, no estás limitado a un solo modelo de eventos, sino que puedes usar ambos: DOM Event 0 ó addEventListener.
bind lo que hace es que devuelve una nueva función donde enlaza otra función con un objeto. en la última versión del estándar javascript (ecmascript), existe la función nativa
bind.
Código:
function Fn(){
...
this.handler = function(){
console.log(this, arguments);
};
this.element.eventType = this.handler.bind(this);
}
como de costumbre, hasta donde conozco iexplorer8 no tiene soporte nativo. por lo que debes crear una implementación que tenga la misma funcionalidad. en la web hay varios ejemplos de como implementar una función similar para navegadores sin soporte. he aquí uno.
Código:
if(!Function.prototype.bind){
Function.prototype.bind = function(obj){
var that = this, args = [].slice.call(arguments, 1);
return function(){
return that.apply(obj, [].slice.call(arguments).concat(args));
};
};
}