Ich versuche auf die Member-Variablen einer Prototyp-Klasse in JavaScript in einem Event-Handler zuzugreifen - etwas, das ich normalerweise verwenden würde das "this" -Schlüsselwort für (oder "Das" [Kopie davon] im Falle von Ereignishandlern). Unnötig zu sagen, dass ich in Schwierigkeiten gerate."Dieses" Schlüsselwort in Ereignismethoden bei der Verwendung von JavaScript-Prototyp-Objekt
Nehmen wir zum Beispiel das HTML-Snippet:
<a id="myLink" href="#">My Link</a>
Und das JavaScript-Code:
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);
}
ein MyClass-Objekt instanzieren und NormalMethod Aufruf funktioniert genau wie ich es (Alarm sagen "erwarten value "), aber das Klicken auf den Link führt zu einem undefinierten Wert, da das Schlüsselwort" this "jetzt auf das Ereignisziel verweist (das HTML-Element anchor()).
Ich bin neu in dem Prototyp-Stil JavaScript, aber in der Vergangenheit, mit Verschlüssen, ich habe einfach eine Kopie von „this“ im Konstruktor gemacht:
var that = this;
Und dann kann ich Mitglieder zugreifen Variablen in Ereignismethoden über das Objekt "that". Das scheint nicht mit Prototyp-Code zu funktionieren. Gibt es einen anderen Weg, dies zu erreichen?
Danke.
Sie in die Prototype-Bibliothek beziehen, sind oder eher gerade JavaScript prototypische Klassen? –
Reagieren drei Jahre später :) Aber für die Nachwelt: Ich bezog sich auf gerade JavaScript prototypische Klassen. – Michael
Mögliches Duplikat von [Wie erreiche ich den richtigen 'this/Kontext innerhalb eines Callbacks?] (Http://stackoverflow.com/q/20279484/1048572)? – Bergi