Hallo,
Dennoch verstehe ich die Logik dahinter nicht ganz:
[...]
var y = x;
y = x.batz;
y = x.foo;alert(y.toSource())
alert(x.toSource())
jetzt bleibt mein Ausgangsobjekt so wie es ist.
Klar, denn du hast ja nichts verändert am Objekt, das von x referenziert wird.
Lediglich y hat der Reihe nach verschiedene Werte erhalten.
Setze ich jedoch beispielsweise:
y.foo = 3;verändere ich mein Ausgangsobjekt.
Direkt nach
var y = x;
verweisen x und y auf genau dasselbe Ausgangsobjekt.
Es gibt also nicht zwei davon. Wenn du dann
y.foo = 3;
setzt, änderst du natürlich die Eigenschaft foo des Objekts.
So ist es auch beim Kopieren von Arrays. Nach
var a = [x, 1, "bla"],
b = a.slice(0);
hast du zwar verschiedene Arrays a und b, aber nicht verschiedene Objekte a[0]
und b[0]
, sondern beide verweisen auf dasselbe Ausgangsobjekt, auf das auch x verweist. a[1] und b[1] sind aber verschiedene Variablen: Weil es keine Objekte sind, wurden sie tatsächlich kopiert, genau wie a[2] und b[2].
Änderungen an b wirken sich nicht auf a aus, aber Änderungen am Objekt b[0] wirken sich sowohl auf a[0] als auch auf x aus, weil die ja alle identisch sind. Vielleicht ist es jetzt klarer...
Gruß, Don P