2009-12-22 16 views
10

Vengo su javascript da C background. In javascript, quando uso l'operatore di assegnazione per assegnare un oggetto a un altro, copia i valori da uno all'altro, oppure entrambi puntano agli stessi dati ?. Oppure l'operatore incaricato fa qualcosa in questo caso?Impostazione di un oggetto uguale a un altro oggetto con l'operatore di assegnazione in Javascript

function point_type() 
{ 
this.x = 0; 
this.y = 0; 
} 

var pnt1 = new point_type(); 
var pnt2 = new point_type(); 

pnt1.x = 4; 
pnt1.y = 5; 

pnt2 = pnt1; 

pnt1.x = 8; 
pnt2.y = 9; 

Nell'esempio precedente, si fa ora pnt2.x uguale 8, o lo fa ancora uguale a 4, o lo fa ancora uguale 0?

Sì, mi rendo conto che posso testarlo da solo, e lo farò mentre aspetterò che la comunità fornisca una risposta. Tuttavia, spero che la risposta alla mia domanda faccia un passo avanti solo rispondendo a questo esempio e possa far luce su come funzionano gli oggetti javascript e alcune best practice.

Follow up domanda:
La risposta sembra essere che viene copiato il riferimento. pnt2 e pnt1 ora puntano agli stessi dati. È possibile impostare il mio oggetto in modo che i valori vengano copiati? Com'è normalmente realizzato in javascript? Chiaramente non voglio impostare ogni attributo singolarmente ogni volta che ho bisogno di copiare questo oggetto.

risposta

12

In JavaScript, i tipi primitivi vengono copiati in base al valore e i tipi di riferimento vengono copiati per riferimento. Maggiori informazioni qui: http://docstore.mik.ua/orelly/web/jscript/ch09_03.html

+0

Un'ottima lettura su copia profonda, copia superficiale e "clone" in Javascript http://oranlooney.com/functional-javascript/ – micahwittman

2

E 'uguale a 8.

pnt2 = pnt1 

Tale affermazione è rivolto l'oggetto pnt2 all'oggetto pnt1 in modo che qualsiasi modifica che fate per pnt1 apparirà in pnt2.

1

Dato l'oggetto che hai mostrato nell'esempio, sta impostando un riferimento all'oggetto. Se fosse un tipo primitivo (numero, data), allora copierebbe l'oggetto.

14

Ogni volta che ho bisogno di copia un oggetto all'altro in JS, ho appena gettato in un primitivo:

var newObject = JSON.stringify(oldObject); 

Poi, quando ho bisogno di usarlo:

var evenNewerObj = JSON.parse(newObject); 

Spero che questo aiuta qualcuno

Problemi correlati