Houyhnhnm: lokale Variablen im Konstruktor

Beitrag lesen

Javascript ist keine blockorientierte Sprache im klassischen Sinn.

Wenn Du schreibst:

a = new MyObject;

wird ein Objekt erzeugt, das u.a. die Variablen enthält, die Du innerhalb von MyObject per var oder mit this.variablenname definiert hast.

Das Objekt ist so lange gültig, wie es Referenzen darauf gibt.

Das bedeutet, daß ein einfacher Funktionsaufruf ein Objekt erzeugt, das so lange gültig ist, wie der Funktionsaufruf aktiv ist; danach existieren keine Referenzen auf das Objekt mehr - Du kannst die 'Leiche' also nicht mehr erreichen und der Garbage-Collector von JS vernichtet es.

Wenn man schreibt:

a = new MyObject;

wird die Funktion MyObject - man spricht in diesem Zusammenhang von einem Konstruktor - aufgerufen und eine Referenz auf das Objekt, das bei dem Aufruf erzeugt wurde, wird an die Variable a zugewiesen; nachdem MyObject terminiert hat, existiert also noch eine Referenz auf das Objekt; der Garbage-Collector läßt es unberührt.

Über a.variablenname kannst Du hinterher noch den Wert von variablenname abfragen oder Funktionen aufrufen, die in MyObject mit

this.funktion = function() { .... }

als öffentlich vereinbart sind.

Variablen, die mit var definiert wurden, sind privat - sie können nur von Funktionen zugegriffen werden, die innerhalb von MyObject definiert sind; man spricht in diesem Fall von Memberfunktionen.

Erst wenn keine weiteren Referenzen auf MyObject mehr vorhanden sind und a ungültig wurde - z.B. durch:

delete a;

wird das Objekt endgültig zerstört und der Speicher vom Garbage-Collector recycelt.