Christian S.: JavaScript und this

Beitrag lesen

Hi,

var obj = new MyClass();
obj.methode1(obj);

ja, das ist ja unpraktikabel. ähnlich der obj.method1.apply(obj)

Mir ist aber nicht ganz klar, was du eigentlich erreichen willst. Wozu brauchst du Klasse MyClass? Das macht nur Sinn, wenn du mehrere solche Objekte erzeugen willst. Und wozu genau dient die Funktion raiseMyEvent? Es ist anscheinend eine Methode irgend eines anderen Objekts. Das hast du aber nicht notiert. Was ist dass denn für ein Objekt und wie soll das dann konkret funktionieren?

Die raiseEvent Methode ist eine Methode eines anderen Objekts, richtig. Diente ja auch nur als Beispiel.

Problem ist dieses:

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()
  {
  }
};

wenn ich nun obj.methode1() aufrufe, klappt alles. Also es wird die methode2  aufgerufen.

wenn ich aber schreibe:

var handler = obj.methode1;
hander();

dann zeigt this irgendwo anders hin (glaub auf das window objekt) und es kracht. Ich würde an dieser Stelle erwarten, dass alles noch genauso funktioniert.

Nun hab ich ein z.B. eine Klasse welche das Verhalten von einer Tabelle steuert. Dort hab ich einen Event, der feuern soll, wenn man eine Tabellenzelle hinzufügt:

[...]
addCell: function()
{
   this.table.insertCell(-1);
   this.raiseCellAdded();
},

raiseCellAdded: function()
{
   this.cellAddedHandler();
}
[...]

var myTable = new MyTable();
myTable.cellAddedHandler = obj.methode1;
myTable.addCell();

das this in obj.methode1 zeigt nun auf myTable anstatt auf obj1.

Naja, nur so als Beispiel.

Problem ist dass man nie weiß in welchem Kontext cellAddedHandler aufgerufen werden muss. Man weiß nur dass es vom Typ "function" ist... Oder gibts Möglichkeit das Original Objekt, zu dem eine Methode gehört, herauszufinden?

Gruß!