Was du hier machst, hat im Grunde mit klassischem OOP nichts zu tun. JavaScript ist nicht objektorientiert im klassischen Sinne und du kannst auch keine Instanzen samt privaten Membern klonen. Es gibt nämliche keine wirklichen privaten Eigenschaften in JavaScript, sondern nur eine Möglichkeit, dieses Verhalten zu emulieren. Aus Sicht von JavaScript erstellst du nichts anderes als zwei Closures, die beide die drei Variablen einschließen und somit teilen.
Das ist alles. Das Objekt, was der Konstruktor liefert, hat demnach nur zwei (wie du es nennen würdest: »öffentliche«) Member, nämlich die beiden Methoden. An die sogenannten »privaten« Member sind bloß lokale Variablen des Konstruktors, daran kommt man »von außen« natürlich nicht dran - ausgenommen die beiden Closures.
for (var i in o) {
for-in-Schleifen bringen dich nicht zum Ziel, dein Objekt hat schließlich keine Member außer die Methoden, die du nicht kopieren brauchst.
Jedoch scheinen beide nicht zu funktionieren, sie liefern zwar eine Referenz, aber kein unabhängiges Objekt.
Das echte Klonen von Objekten ginge anders, nämlich mit einer neuen Funktion, Zuweisung des alten Objektes als ihr Prototyp und schließliches Instantiieren des Konstruktors.
Das würde dir bei deinem Problem aber nicht weiterhelfen.
Ansonsten hoffe ich auf Anregungen zum Klonen.
- Lege »öffentliche« Member des Instanzobjektes an oder
- Lege eine priviligiere Klon-Methode an, die imstande ist, auch die eingeschlossenen lokalen Variablen der Konstruktorfunktion zu kopieren.
this.clone = function () {
var clone = new this.constructor;
clone.attributeHinzufuegen(staerke, geschick, vitalitaet);
return clone;
}
Mathias