Sto provando ad accedere alle variabili membro di una classe prototipo in JavaScript in un gestore eventi - qualcosa che in genere utilizzerei la parola chiave "this" per (o "quello" [copia di questo] nel caso di gestori di eventi). Inutile dire che mi trovo nei guai."questa" parola chiave nei metodi evento quando si utilizza l'oggetto prototipo JavaScript
Prendiamo, per esempio, questo frammento di codice HTML:
<a id="myLink" href="#">My Link</a>
E questo codice 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);
}
un'istanza di un oggetto MyClass e chiamando NormalMethod funziona esattamente come mi aspettavo che (avviso che dice " valore "), ma facendo clic sul collegamento si ottiene un valore indefinito perché la parola chiave" this "ora fa riferimento al target dell'evento (l'elemento HTML anchor).
Sono nuovo al prototipo JavaScript stile, ma in passato, con chiusure, ho semplicemente fatto una copia di "questo" nel costruttore:
var that = this;
E poi ho potuto accedere ai membri variabili nei metodi evento tramite l'oggetto "that". Non sembra funzionare con il codice prototipo. C'è un altro modo per raggiungere questo obiettivo?
Grazie.
Si riferisce alla libreria Prototype o meglio dritti classi prototipo JavaScript? –
Rispondere con tre anni di ritardo :) Ma per i posteri: mi riferivo a classi prototipo dritte di JavaScript. – Michael
Possibile duplicato di [Come accedere al corretto 'this'/contesto all'interno di un callback?] (Http://stackoverflow.com/q/20279484/1048572)? – Bergi