huhu: Objekte klonen

Beitrag lesen

Hallo,

ich suche nach einer Möglichkeit, ein bestehendes Objekt zu klonen. Damit meine ich, dass das geklonte Objekt dem Original gleicht, aber von diesem unabhängig ist, so dass Änderungen in dem einem keine Auswirkungen auf das andere haben.

Natürlich habe ich mich informiert und zwei Funktionen gefunden:

  
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;  
}  

Jedoch scheinen beide nicht zu funktionieren, sie liefern zwar eine Referenz, aber kein unabhängiges Objekt.

Hier der Testcode:

  
function charakter() {  
	var charakter = this;  
	var staerke = 0;  
	var geschick = 0;  
	var vitalitaet = 0;  
	  
	charakter.attributeHinzufuegen = function (staerkeNeu,geschickNeu,vitalitaetNeu) {  
		if (isset(staerkeNeu,geschickNeu,vitalitaetNeu)) {  
			staerke = staerkeNeu;  
			geschick = geschickNeu;  
			vitalitaet = vitalitaetNeu;  
		}  
	}  
	  
	charakter.werte = function () {  
		return new Array(staerke,geschick,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());  

Bin Anfänger in objektorientierter Programierung, lese mich aber gerne auch in komplexere Zusammenhänge ein.
Wenn ich hier grundsätzliche Fehler gemacht habe, würde ich mich freuen, darauf hingewiesen zu werden.
Ansonsten hoffe ich auf Anregungen zum Klonen.

Alles Gute und vielen Dank

huhu