2013-01-23 17 views
10

Powiel możliwe:
How do I correctly clone a JavaScript object?obiekt JavaScript popychany do tablicy

mam ten kod:

var temp = []; 
var obj = {name:"1"}; 
temp.push(obj); 
obj.name = "2"; 
temp.push(obj); 

Co ja spodziewałem się być prawdą:

temp[0].name == "1" && temp[1].name == "2"; 

Co właściwie się dzieje:

temp[0].name == "2" && temp[1].name == "2"; 

Dlaczego tak się dzieje i jak mogę dostać to, czego ja oczekuję?

+0

... co jest rozwiązaniem http://stackoverflow.com/questions/14417645/javascript-object-cloning/14417676#14417676 –

Odpowiedz

8

Tablice JavaScript zawierają odniesienia do obiektów, a nie samych obiektów. Po naciśnięciu obiektu do tablicy nie tworzy on nowego obiektu, ale po prostu umieszcza odwołanie do obiektu, do którego również wskazuje obiekt, do tablicy.

Tak więc na koniec obj, temp [0] i temp 1 wszystkie wskazują na ten sam obiekt. Aby utworzyć całkowicie nowy obiekt, można użyć Object.create() lub jQuery.extend ({}, obj). Choć w Twoim przypadku jest to łatwe wystarczy utworzyć nowy obiekt przy użyciu prostego var newobj = {name="2"}

4

Obiekty JavaScript są przekazywane przez odniesienie. W twoim przypadku masz tylko jeden obiekt "obj", a temp [0] i temp [1] wskazują ten sam obiekt.

0

obj bycie obiektem jest dodawane przez odwołanie w tablicy, dzięki czemu faktycznie dwa razy dodajemy tę samą wartość obj.

Powiązane problemy