wib: Wie löscht man ein Objekt aus sich selbst heraus?

Beitrag lesen

Hi,

ich habe ein Objekt mit der Methode delete(), doch diese Methode verhält sich nicht wie ich erwartet habe. Sie soll eigentlich das gesamte Objekt löschen, indem sie diese Funktion aufruft:

function deleteObj(obj) {
  return delete obj;
}

In dem Objekt gibt es noch andere Methoden, zum Beispiel
DOMelement.onclick = function() {
  self.close(); // Am Anfang des Objekts wird self = this; deklariert.
}

Mit den Objekten und Referenzen ist das ja in JS nicht immer ganz einfach. Ich habe gelesen, dass alle Referenzen zu einem Objekt gelöscht werden müssen, bevor man das Objekt selbst löschen kann (reference count muss 0 sein). Also habe ich der Funktion deleteObj() noch dementsprechend erweitert (self = null; alle DOM Objekte entfernen), aber es klappt immernoch nicht.

Hier mal ein Beispiel:

nav = new xWindow(); // Hier wird ein Bereich namens nav erstellt
  /* Hier wird ein Link in nav geschrieben */
  AnewWindow = addElement("a", nav.content);
  AnewWindowText = addText("Create a new xWindow", AnewWindow);
  AnewWindow.href = "javascript:void(0);";
  AnewWindow.onclick = function() { // Wenn man auf diesen Link klickt, soll ein weiterer Bereich erstellt werden...
    if(!window.newX) { // ... es sei denn, es gibt ihn schon
      newX = new xWindow();
      newX.setTitle("A new xWindow");
      newX.close(); // der Bereich soll geschlossen werden, klappt aber nicht
    } else {
      alert(newX.title);
    }
  }
  AnewWindow = null; // (Memory leak verhindern)

Wenn man auf den Link klickt, öffnet sich ein neuer Bereich. Er wird kurz darauf wieder geschlossen. newX soll gelöscht werden. Wenn man wieder auf den Link klickt, kommt aber alert mit "A new xWindow".
Wenn ich in an entsprechenden Stellen im Code testweise mal
delete newX;
einfüge, wird newX natürlich korrekt gelöscht, aber es kann ja auch sein, dass das Objekt mal einen anderen Namen hat.

Wie lösche ich also newX mit folgendem Aufruf:
newX.close();
?

Jetzt bin ich mal gespannt :)
Grüße, wib!