Calocybe: "close" als Eigenschaft?

Beitrag lesen

Hi Leuts!

(Ursprünglich dachte ich, daß, egal welches man wegläßt, das Ergebnis das gleiche sein müßte, da ja window.FensterObj abfragt, ob das Fenster existiert, und FensterObj.close, ob es die Methode close des FensterObj gibt - die kanns doch nicht geben, wenn das Fenster nicht mehr existiert - denkste)

FensterObj ist lediglich eine Referenz auf ein Speicherobjekt, ueber welches man auf das echte Fenster zugreifen und dieses manipulieren kann. Das (Speicher-)Objekt und das echte Fenster sind also zwei verschiedene Dinge. Schliest nun der Anwender das Fenster, so existiert das Objekt aber weiterhin. Und das ist auch gut so, denn es kann nicht angehen, dass von *irgendjemandem* ohne des JS-Programmierers Zutun einfach Variablen auf null oder undefined gesetzt werden. (Das naechste Mal aendert sich vielleicht auch noch der Wert einer Variablen einfach mal so von 3 auf 10, oder was?) Das Objekt, das das Fenster repraesentiert, kann aber sehr wohl den Inhalt einer seiner Membervariablen aendern, denn dazu ist es ja da - so ist die Klasse "window" eben definiert. Und so reagiert das Objekt (welches durch FensterObj referenziert wird) eben auf die Schliessung des Fensters mit dem Setzen seines closed-Flags.

Das Objekt existiert aber weiterhin, und man kann nach dem Schliessen z.B. vom Hauptfenster aus noch Variablen abfragen, die das Popup in seiner window-Variablen gespeichert hatte (zwecks Datenaustausch). Denn die window-Variable in dem Popup und die FensterObj-Variable im Hauptfenster sind beides nur Refernzen auf *ein und dasselbe* Speicherobjekt. (Siehe auch <../../sfarchiv/2000_1/t10312.htm#a51977>.)

Beim NS allerdings nicht, da FensterObj immer noch existiert, wenn es einmal geöffnet und wieder geschlossen wurde. Die Methode FensterObj.close gibts bei geschlossenen Fenstern (die als Objekt noch irgendwo in den Unsichtbaren Regionen des Netscape herumschwirren) aber nicht mehr.
Also kann man die Abfrage window.FensterObj weglassen (nicht aber die FensterObj.close)

Nun ja, je nach Programmierung sollte man auch FensterObj pruefen, denn wenn Closer() schon aufgerufen wird, wenn noch gar kein Fenster geoeffnet wurde, ist FensterObj unter Umstaenden noch undefined. Und auf close pruefen halte ich fuer, na sagen mir mal seltsam, denn eigentlich sollte es die Methode weiterhin geben, auch wenn das Fenster schon geschlossen ist. Ich bevorzuge jedenfalls die Abfrage auf closed:

if (window.FensterObj && !window.FensterObj.closed) FensterObj.close();

Calocybe