2016-03-23 15 views
-2

So habe ich ein JavaScript-Objekt game aufgerufen, das zwei Methoden hat:JAVASCRIPT: Verfahren auf ein anderes Verfahren zum gleichen Objekt zugeordnet - ändernden Wert der ersten Veränderungen zweiter

function game() { 
    this.TxtRevealed = new Array(); 
    this.TxtRevealedBackup = new Array(); 
[...] 
} 

nun außerhalb eines Objekts i eins zwei zuweisen andere:

game.TxtRevealedBackup = game.TxtRevealed; 

nach einer Weile ich ändern game.TxtRevealed (i verwenden slice Funktion einige Werte aus zu schneiden). Und jetzt passiert etwas, was ich nicht vorhabe: automatisch game.TxtRevealedBackup ändert sich auch auf neuen Wert von game.TxtRevealed.

Ich würde erwarten, dass game.TxtRevealedBackup wäre das gleiche wie game.TxtRevealed war im Moment der Zuweisung. Es funktioniert so, als ob game.TxtRevealedBackup auf einen Wert zeigt, der durch game.TxtRevealed dargestellt wird, nicht den Wert, den es im Moment der Zuweisung hatte.

Warum passiert es und wie kann ich arbeiten, was ich erwarte?

Kalreg.

+2

Ja, Objekte funktionieren so. BTW, "Slice" ändert das Array nicht; wahrscheinlich meinst du spleißen. – Oriol

+1

Die meisten objektorientierten Programmiersprachen funktionieren auf diese Weise. Objekte werden als Referenzen dargestellt. * "wie es funktioniert, würde ich erwarten" * Sie können das Objekt klonen. –

+0

Was soll ich tun, um mein Ziel zu erreichen? – Kalreg

Antwort

0

Objekte funktionieren per Referenz. Wenn Sie Objekte klonen möchten, sehen Sie answer.

+0

Ich würde erwarten, dass es eine viel einfachere Lösung als das gibt, etwas wie das Hinzufügen & zum Namen der Variablen oder etw. – Kalreg

+0

Nein. Aber wenn Sie jQuery verwenden, können Sie etwas wie 'var cloned = $ .extend ({}, original);' verwenden. – reieRMeister

Verwandte Themen