2012-12-18 11 views
9

Podczas ładowania strony Tworzę dwa obiekty JavaScript, objDemo1 i objDemo1Backup, gdzie ten drugi jest po prostu dokładną kopią pierwszego.Zamień obiekt o jednym javascript na inny obiekt

np.

objDemo1 { 
    sub_1 = { something: 123, somethingElse: 321 }, 
    sub_2 = { something: 456, somethingElse: 654 } 
} 

mogę zmodyfikować wartości w sub_ a także dodawać/usuwać nowych sub_ „s ale jedynym obiektem jestem edycji jest objDemo1. to znaczy, że nigdy się nie zmieniają objDemo1Backup

Mam przycisk reset, który po kliknięciu zostanie zresetowany objDemo1 z powrotem do tego, co było, gdy strona pierwotnie załadowane (tj objDemo1 = objDemo1Backup). Tutaj mam problem ..

Jak ustawić objDemo1 na objDemo1Backup?

Próbowałem:

objDemo1 = objDemo1Backup; 

i

objDemo1 = null; 
var objDemo1 = objDemo1Backup; 

... a także podobne zmiany, ale nic nie wydaje się działać. Jakieś pomysły?

  • Uwaga: Mogę potwierdzić, że w momencie resetowania, objDemo1Backup jest dokładnie taka sama, jak to było, kiedy go stworzył i objDemo1 uległ zmianie.
  • Mój kod jest zdecydowanie w funkcji "reset", gdzie próbowałem objDemo1 = objDemo1Backup ... Po prostu nie mogę wymyślić składni, aby zastąpić obiekt.
+1

Mam zamiar założyć, że to, co się dzieje, to to, że zarówno "objDemo1", jak i "objDemo1Backup" wskazują na ten sam obiekt, kiedy je zmienisz, oba zostaną zmienione. To może nie wydawać się intuicyjne, ale tak działa javascript. Google ** "obiekt klonu javascript" **, aby uzyskać więcej informacji. – Shmiddty

+1

Grasz z odwołaniem do obiektu, a nie klonowaniem. Powinieneś klonować swój obiekt zamiast przypisywać go używając = – LittleSweetSeas

Odpowiedz

7

W obiektach JavaScript obiekty są przekazywane przez odniesienie, nigdy według wartości. A więc:

var objDemo, objDemoBackup; 
objDemo = { 
    sub_1: "foo"; 
}; 
objDemoBackup = objDemo; 
objDemo.sub_2 = "bar"; 
console.log(objDemoBackup.sub_2); // "bar" 

Aby otrzymać kopię, należy użyć funkcji kopiowania. JavaScript nie ma jednego natywnie, ale tutaj jest clone realizacja: How do I correctly clone a JavaScript object?

var objDemo, objDemoBackup; 
objDemo = { 
    sub_1: "foo"; 
}; 
objDemoBackup = clone(objDemo); 
objDemo.sub_2 = "bar"; 
console.log(objDemoBackup.sub_2); // undefined 
+0

Więc jeśli chciałbym zresetować objDemo z powrotem do tego, co objDemoBackup było punktem klonowania, zrobiłbym to: 'objDemo = clone (objDemoBackup);' –

+0

Tak, musisz go ponownie sklonować lub skończysz z odnośnikiem :) – Halcyon

+0

Dobre rzeczy, używając 'clone()' sprawdziły się. –

12

Używam angularjs i zajęło mi trochę czasu, aby dowiedzieć się, jak skopiować obiekt do innego obiektu. Zwykle dostaniesz obiekty sklonować wywołując klon lub tutaj w kątowym kopii:

var targetObj = angular.copy(sourceObj); 

To daje nową instancję sklonowanych (z nowym odniesienia) obiektu źródłowego. Ale szybkie spojrzenie w docs ujawnia drugi parametr skopiować:

angular.copy(sourceObj, targetObj) 

ten sposób można zastąpić obiekt docelowy z pól i metod źródła i również zachować cel obiektów odniesienia.

+2

Dokładnie tego, czego szukałem. Nie wiedziałem, że 'angle.copy' może zająć obiekt docelowy. Dzięki! –

+0

W tym pytaniu nie ma tagu AngularJS. –

Powiązane problemy