Estoy tratando de acceder a las variables miembro de una clase de prototipo en JavaScript en un controlador de eventos, algo que normalmente usaría la palabra clave "this" para (o "that" [copia de esto] en el caso de manejadores de eventos). No hace falta decir que me estoy metiendo en problemas."this" palabra clave en métodos de evento cuando se utiliza el objeto prototipo JavaScript
Tomemos, por ejemplo, este fragmento HTML:
<a id="myLink" href="#">My Link</a>
Y este código JavaScript:
function MyClass()
{
this.field = "value"
this.link = document.getElementById("myLink");
this.link.onclick = this.EventMethod;
}
MyClass.prototype.NormalMethod = function()
{
alert(this.field);
}
MyClass.prototype.EventMethod = function(e)
{
alert(this.field);
}
Crear instancias de un objeto MiClase y llamando NormalMethod funciona exactamente igual que espero que (alerta diciendo " valor "), pero al hacer clic en el enlace se obtiene un valor indefinido porque la palabra clave" this "ahora hace referencia al objetivo del evento (el elemento HTML anchor()).
Soy nuevo en el prototipo JavaScript estilo, pero en el pasado, con los cierres, simplemente he hecho una copia del "presente" en el constructor:
var that = this;
Y entonces pude acceder a los miembros variables en los métodos de eventos a través del objeto "eso". Eso no parece funcionar con el código del prototipo. ¿Hay alguna otra manera de lograr esto?
Gracias.
¿Se refiere a la librería Prototype o clases prototípicos de JavaScript en lugar rectas? –
Respondiendo tres años tarde :) Pero para la posteridad: me estaba refiriendo a las clases prototípicas de JavaScript. – Michael
Posible duplicado de [¿Cómo acceder al correcto 'this'/context dentro de una devolución de llamada?] (Http://stackoverflow.com/q/20279484/1048572)? – Bergi