Axel Richter: JS-Klassen und Event-Objekt

Beitrag lesen

Hallo,

ich hätte mal 'ne Frage zu selbstdefinierten Objekten und Eventhändlern in JS.

In JS und auch in JavaScript kann man keine Objekte selbst definieren, da man keine Klassen definieren kann, die diese Objekte beschreiben. Das sollten Script-Sprachen auch nicht leisten.

Ich habe also in JS eine Klasse geschrieben,

Nein. Du hast eine Funktion geschrieben.

deren Methode A über das Eventobjekt die Methode B des selben Objektes aufruft. In der 2. Methode kann ich  "this" leider nicht mehr anwenden,

Ja, weil Du eine Variable ansprechen willst, die im Bereich der Funktion Meine_Klasse gültig ist. Das this verweist aber auf eine Instanz, die diese Funktion mit dem Operator new geöffnet hat. Diese ist hier noch gar nicht bekannt.

sondern muss explizit den Namen der Objektinstanz nennen. Wie kann ich das umgehen?

Naja, man kann ...

function Meine_Klasse () {
  //Meine_Klasse intern:
  var argument_1 = 1;
  var argument_2 = 2;

function methode_A () {
    document.onclick = this.methode_B;
  }

function methode_B () {
    alert (argument_1);
  }

//Folgendes präsentieren wir nach Aussen:
  this.argument_1 = argument_1;
  this.argument_2 = argument_2;
  this.methode_A = methode_A;
  this.methode_B = methode_B;
}

var Versuchsobjekt = new Meine_Klasse;
alert(Versuchsobjekt);
Versuchsobjekt.methode_A ();
alert(Versuchsobjekt.argument_1);
alert(Versuchsobjekt.argument_2);
Versuchsobjekt = "Test"
alert(Versuchsobjekt);

!ABER!
Es sieht nur so aus, als wäre die Funktion Meine_Klasse eine Klasse und Versuchsobjekt eine Objektinstanz, die auf dieser Klassendefinition basiert. Speziell in der Speicherverwaltung kann diese Art der Vergewaltigung von JavaScript zu ernsten Problemen führen.

Versuchsobjekt ist eine globale Variable, die die gesamte Funktion Meine_Klasse enthält. Es gibt _keine_ programmtechnische Möglichkeit diesen Müll wieder aus dem Arbeitsspeicher zu bekommen (siehe meinen Versuch mit einer Neuzuweisung). Mehrere solche Objekte bringen den Arbeitsspeicher irgendwann zum überlaufen.

viele Grüße

Axel