Hm, vielleicht hab ich es ja doch nicht kapiert.
Habe jetzt Variablen public gemacht, aber das Ergebnis ist immer noch das selbe. Ich hab auch mal die prototype.js ausprobiert, die bietet auch eine clone-Funktion an, aber immer noch lassen sich die beiden Objekte nach dem Klonen nicht unabhängig voneinander verändern.
Offenbar habe ich etwas grundlegendes nicht verstanden.
Hier ist noch mal der (veränderte) Testcode:
function clone1(o) {
function c(o) {
for (var i in o) {
this[i] = o[i];
}
}
return new c(o);
}
function clone2(obj) {
if(obj == null || typeof(obj) != 'object') return obj;
var c = new obj.constructor();
for(var key in obj) {
c[key] = clone2(obj[key]);
}
return c;
}
function charakter() {
var charakter = this;
charakter.staerke = 0;
charakter.geschick = 0;
charakter.vitalitaet = 0;
charakter.attributeHinzufuegen = function (staerkeNeu,geschickNeu,vitalitaetNeu) {
if (isset(staerkeNeu,geschickNeu,vitalitaetNeu)) {
charakter.staerke = staerkeNeu;
charakter.geschick = geschickNeu;
charakter.vitalitaet = vitalitaetNeu;
}
}
charakter.werte = function () {
return new Array(charakter.staerke,charakter.geschick,charakter.vitalitaet);
}
}
var charakter0 = new charakter();
var charakter1 = clone1(charakter0);
charakter0.attributeHinzufuegen(12,2,19);
charakter1.attributeHinzufuegen(14,8,2);
// gibt zweimal „14,8,2“ aus:
alert(charakter0.werte());
alert(charakter1.werte());
var charakter0 = new charakter();
var charakter1 = clone2(charakter0);
charakter0.attributeHinzufuegen(12,2,19);
charakter1.attributeHinzufuegen(14,8,2);
// gibt zweimal „14,8,2“ aus:
alert(charakter0.werte());
alert(charakter1.werte());
Sorry, dass ich noch mal damit nerve, vielleicht sehe ich ja auch morgen klarer.
Alles Gute
huhu