Hallo,
Ich habe eine "Klasse" mit Methoden, von der ich ein Objekt erzeuge. Ich könnte dieses Objekt auch direkt so erzeugen:
var myObj =
{
methode1: function()
{
this.methode2();
},
methode2: function()
{
}
};
Genau, eine "Klasse" brauchst du nicht, wenn du nicht mehrere solche Objekte mit erzeugen willst.
wenn ich aber schreibe:
var handler = obj.methode1;
hander();dann zeigt this irgendwo anders hin (glaub auf das window objekt) und es kracht.
Ja, in diesem Fall kannst du "this" in methode1 nicht wie gewünscht verwenden. Das ist aber auch nicht nötig. Da du nur ein einziges solches Objekt hast und auch weißt, wie es heißt, kannst du den Namen direkt notieren:
var myObj = {
methode1: function()
{
myObj.methode2();
},
methode2: function()
{
}
};
Oder gibts Möglichkeit das Original Objekt, zu dem eine Methode gehört, herauszufinden?
Nicht direkt. Wie LanX bereits schrieb, geht das aber z.B. über eine Variable, die beim Initialisieren des Objekts gesetzt wird, z.B. so:
var myObj = {
init: function ()
{
this.methode1.self = this;
},
methode1: function()
{
arguments.callee.self.methode2(); // arguments.callee ist methode1
},
methode2: function()
{
}
};
myObj.init() // Das Objekt einmalig initialisieren.
var handler = myObj.methode1;
handler();
Oder, wenn's etwas raffinierter sein darf:
var myObj = ({
init: function ()
{
this.methode1.self = this;
return this;
},
methode1: function()
{
arguments.callee.self.methode2();
},
methode2: function()
{
}
}).init(); // Das Objekt sofort initialisieren.
var handler = myObj.methode1;
handler();
Gruß, Don P