Ich lese aus den etwas konfusen darstellungen, dass du erwartest, dass alles verschwindet, was im zusammenhang mit deinem JS Objekt steht, das ist aber nicht so. Für die Elemente des DOM bist du selber zuständig.
Nee, sorry, die DOM Elemente lösche ich selbst, danach soll das Objekt entfernt werden.
if(!window.newX) { // Ein neues Fenster namens newX soll nur erstellt werden, wenn es newX nicht bereits gibt. Deswegen muss, wenn newX geschlossen werden soll, auch das Objekt newX gelöscht werden, nicht nur die entsprechenden DOM Elemente. Aber das ist nicht der Einzige Grund; wenn man 1000 Fenster öffnet und wieder schließt, müssen die Objekte gelöscht werden, sonst bleiben die im Speicher.
Wer sagt das?
Meines Wissens hat JS eine garbage collection und kümmert sich um die Speicherverwaltung weitestgehend alleine.
Ja, das ist ja auch richtig, aber der garbage collector entfernt natürlich nur Dinge, die entweder nicht mehr gebraucht werden oder aber die man mit dem delete operator löscht.
Anfang Versuchsaufbau:
test = new Foo();
alert(test.bar); // Ich würde undefined erwarten, aber test wurde nicht gelöscht, also kommt "bar".
function Foo() {
this.bar = "bar";
this.deleteMyself = deleteObj;
this.deleteMyself(); // Dieses Objekt soll sich mit dieser Methode selbst löschen
}
function deleteObj() {
return delete this; // this bezieht sich hier nicht auf deleteObj, sondern auf Foo, um das mal gleich vorwegzunehmen. Die Funktion gibt false zurück, "this" kann also nicht gelöscht werden. Wieso nicht? Wenn ich return delete this.bar; schreibe, wird test.bar tatsächlich gelöscht und alert(test.bar); gibt undefined aus.
}
Ende Versuchsaufbau.
auch nach newX = null?
newX = null funktioniert, aber das kann ich innerhalb des Objekts oder iner seiner Methoden nicht anwenden, weil das Fenster ja nicht unbedingt newX heißen muss.