2012-12-18 23 views
9

Beim Laden der Seite erstelle ich zwei Javascript-Objekte, objDemo1 und objDemo1Backup, wobei letzteres einfach eine exakte Kopie des ersten ist.Ersetze ein Javascript-Objekt durch ein anderes Objekt

z.B.

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

kann ich die Werte in sub_ auch ändern, wie hinzufügen/löschen neue sub_ ist aber das einzige Objekt, das ich bearbeite bin ist objDemo1. das heißt ich nie objDemo1Backup

ändern habe ich eine Reset-Taste, dass wann objDemo1 wieder auf geklickt zurückgesetzt, was es war, wenn die Seite ursprünglich geladen (das heißt objDemo1 = objDemo1Backup). Dies ist, wo ich das Problem habe ..

Wie stelle ich objDemo1 auf objDemo1Backup?

Ich habe versucht:

objDemo1 = objDemo1Backup; 

und

objDemo1 = null; 
var objDemo1 = objDemo1Backup; 

... sowie ähnliche Variationen, aber nichts scheint zu funktionieren. Irgendwelche Ideen?

  • Hinweis: ich, dass an der Stelle der Rückstellung bestätigen kann, objDemo1Backup ist genau das gleiche, wie es war, als ich es erstellt und objDemo1 hat sich geändert.
  • Mein Code ist definitiv die "Reset" -Funktionalität, wo ich die objDemo1 = objDemo1Backup versucht habe ... Ich kann einfach nicht herausfinden, die Syntax, um das Objekt zu ersetzen.
+1

Ich gehe davon aus, dass, da sowohl "objDemo1" als auch "objDemo1Backup" auf das gleiche Objekt zeigen, beide geändert werden, wenn Sie einen ändern. Dies scheint nicht intuitiv, aber es ist die Art, wie JavaScript funktioniert. Google ** "Javascript Clone Object" ** für weitere Details. – Shmiddty

+1

Sie spielen mit Objektreferenz, nicht klonen. Sie sollten Ihr Objekt klonen, anstatt es zuzuweisen, indem Sie = – LittleSweetSeas

Antwort

7

In JavaScript-Objekte werden durch Bezugnahme eingeschlossen, nie als Wert übergeben. Also:

Um eine Kopie zu erhalten, müssen Sie eine Kopierfunktion verwenden. JavaScript muss man nicht nativ, aber hier ist eine clone Umsetzung: 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

verwenden. Also, wenn ich objDemo zurück auf das, was objDemoBackup war, klonen wollte, würde ich folgendes tun: 'objDemo = clone (objDemoBackup);' –

+0

Ja, Sie müssen es erneut klonen oder du wirst mit einer Referenz enden :) – Halcyon

+0

Gute Sachen, mit 'clone()' hat es funktioniert. –

12

Ich verwende AngularJS und es dauerte einige Zeit, um herauszufinden, wie ein Objekt auf ein anderes Objekt zu kopieren. Normalerweise werden Sie ein Objekt durch den Aufruf Klon oder hier in Winkel Kopie klonen erhalten:

var targetObj = angular.copy(sourceObj); 

Dies Ihnen eine neue geklonte Instanz (mit einer neuen Referenz) dem Quellobjekts gibt. Aber ein kurzer Blick in die Dokumentation zeigt der zweite Parameter von kopieren:

angular.copy(sourceObj, targetObj) 

diese Weise können Sie ein Zielobjekt mit den Feldern außer Kraft setzen können und Methoden der Quelle und halten auch die Zielreferenzobjekte.

+2

Genau das, was ich gesucht habe. Ich wusste nicht, dass "angular.copy" ein Zielobjekt nehmen könnte. Vielen Dank! –

+0

In dieser Frage gibt es kein AngularJS-Tag. –

Verwandte Themen