Aha, ich hatte die vielen Ratschläge nicht endgültig befolgt und nur die Variablen zu public members gemacht, nicht jedoch die Funktionen.
Diese waren über „var charakter = this;“ immer noch „privat“.
Nun funktioniert es:
function clone(obj) {
if(obj == null || typeof(obj) != 'object') return obj;
var c = new obj.constructor();
for(var key in obj) {
c[key] = clone(obj[key]);
}
return c;
}
function charakter() {
this.staerke = 0;
this.geschick = 0;
this.vitalitaet = 0;
this.attributeHinzufuegen = function (staerke,geschick,vitalitaet) {
this.staerke = staerke;
this.geschick = geschick;
this.vitalitaet = vitalitaet;
}
this.werte = function () {
return new Array(this.staerke,this.geschick,this.vitalitaet);
}
}
var charakter0 = new charakter();
var charakter1 = clone(charakter0);
charakter0.attributeHinzufuegen(12,2,19);
charakter1.attributeHinzufuegen(14,8,2);
// Juhu, gibt „12,2,19“ und „14,8,2“ aus:
alert(charakter0.werte());
alert(charakter1.werte());
Ich bin ja froh, dass es nun klappt, aber auch etwas enttäuscht. Bisher scheint es mir zwar nicht so, dass die in Mathias Schäfers Artikel angesprochenen Probleme in meinem Projekt auftreten könnten, jedoch war ich schon etwas stolz, meinen Code nach den dort formulierten Richtlinien organisiert zu haben.
Und es hat auch schon alles funktioniert, die „charaktere“ sind noch umfangreicher als hier vorgestellt, ich konnte verschiedene davon instanzieren und mit „item“-Objekten, die verschiedene Werte hatten, ausstatten.
In meinen (bescheidenen) Augen war das schon super objektorientiert.
Und nun scheitern diese Prinzipien an so etwas (wieder in meinen Augen) trivialen wie dem erneuten abspeichern eines Objekts an einer anderen Stelle. Nun gut, ich will nicht unzufrieden sein, da es nun funktioniert.
Und gelernt habe ich ja auch einiges. ;-)
Ich bedanke mich bei allen ganz herzlich für die vielen ausführlichen Erklärungen und kompetenten Hilfestellungen. Das ist schon ein tolles Forum mit vielen lieben Leuten.
Danke sehr und weiterhin viel Freude an der Sache!
Alles Gute
huhu