Don P: nur array-kopie verändern

Beitrag lesen

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