Christoph: Objekte klonen

Beitrag lesen

Moin.

Ich werde alle Member public machen. Eine interne Funktion, die alle Variablen einzeln abfragt, ist mir zu umfangreich und müsste ja auch immer mitgewartet werden.

Finde ich verünftig. JavaScript ist nicht Java, man sollte sich davor hüten, Methoden einer Sprache unreflektiert auf eine andere zu übertragen.

Die in JavaScript vorgesehene Variante der Objektorientierung kennt weder private Member - alle Eigenschaften sind öffentlich - noch Vererbungshierarchien: Möchte man eine JS-'Klasse' erweitern, fügt man einfach die entsprechenden Eigenschaften dem Prototyp hinzu, d.h. kopiert Referenzen auf gemeinsame EIgenschaften ('aggregation').

Die Sprache ist allerdings mächtig genug, um andere Paradigmen zu unterstützen (z.B. private Eigenschaften durch closures, echte prototypische oder klassenbasierte Vererbung können in wenigen Zeilen Code nachgereicht werden).

Man sollte sich jedoch über die Konsequenzen des gewählten Programmierstils im Klaren sein: private Eigenschaften über closures bereitzustellen beispielsweise ist nicht wirklich effizient: Im Gegensatz zu Funktionen, die dem Prototyp hinzugefügt werden, muss für Funktionen mit Zugriff auf private Eigenschaften für jede Instanz ein neues Funktionsobjekt mit Referenz auf die lexikalische Umgebung (die lokalen Variablen) der Konstruktorfunktion erzeugt werden.

Christoph