Zugriff auf Objekteigenschaft innerhalb einer Objektmethode
EndEffect
- javascript
Hallo,
vorweg: Ich möchte keine Diskussion über die Objektorientiertheit von Javascript heraufbeschwören, sondern suche lediglich nach einer Lösung für mein Problem...
Ich versuche innerhalb einer Methode meines Objekts auf ein Attribut selbiges' (des Objekts) zu zugreifen. Ums verständlicher zu machen folgt ein Beispiel:
function CBla (Att1)
{
---this.Att1 = Att1;
---this.Meth1 = function ()
---{
------alert(this.Att1);
---}
}
var myBla = new CBla('test');
myBla.Meth1();
// Die Bindestriche (-) im Beispiel dienen ausschließlich zur Formatierung, sie sind selbsverständlich wegzudenken
Dieses Beispiel sollte nix anderes machen, als 'test' per PopUp auszugeben, wie man sich denken kann funktioniert es so, wie dargestellt, nicht, da durch den Aufruf von this innerhalb von Meth1 bezug auf Meth1 und nicht auf CBla genommen wird.
Hi,
Dieses Beispiel sollte nix anderes machen, als 'test' per PopUp auszugeben,
Genau das tut's bei mir auch.
wie man sich denken kann funktioniert es so, wie dargestellt, nicht,
Es tut das, was ich erwartet habe: Es "funzt".
da durch den Aufruf von this innerhalb von Meth1 bezug auf Meth1 und nicht auf CBla genommen wird.
Dann machst du irgendetwas anderes, als simpel myBla.Meth1() aufzurufen.
Ja, wenn du die Methode bspw. einem Eventhandler zuweist, *dann* verweist this natuerlich auf das Element, auf welchem der Event gefeuert hat.
Dieses "Problem" loest man so:
http://aktuell.de.selfhtml.org/artikel/javascript/organisation/index.htm#methoden-eigener-objekte-und-kontext
MfG ChrisB
Bei mir funktioniert das eben nicht, möglicherweise liegts an Opera. Habe jetzt ein wenig anders gekapselt, sodass es jetzt auch bei mir funktioniert. Trotzdem danke für die Antwort und den nützlichen Link.
Bei mir funktioniert das eben nicht, möglicherweise liegts an Opera.
Natürlich funktionert dein Beispiel auch in Opera, vermutlich beschreibt dein Beispiel aber nicht das was du in Wirklichkeit machst.
Struppi.
Hallo,
Dieses Beispiel sollte nix anderes machen, als 'test' per PopUp auszugeben, wie man sich denken kann funktioniert es so, wie dargestellt, nicht
Wieso kann man sich das denken?
this verweist nie auf »dieselbe Funktion«, sondern auf das Objekt, in dessen Kontext die aktuelle Funktion ausgeführt wird (»execution context«).
da durch den Aufruf von this innerhalb von Meth1 bezug auf Meth1 und nicht auf CBla genommen wird.
Nein! Bezug auf die aktuelle Funktion nimmt man über arguments.callee - das ist etwas ganz anders als this.
Wie schon vermutet führst du die Methode wahrscheinlich in einem anderen Kontext aus, denn wenn du einfach objekt.methode() notierst, wird die Methode immer im Kontext von objekt ausgeführt (sofern die Methode nicht eine andere kapselt, um diese im Kontext eines anderen Objektes auszuführen).
Mathias