2009-12-22 18 views
10

'daki atama işleciyle başka bir nesneye eşit olarak ayarlamak C arka planından javascript'e geliyorum. Javascript'te, atama işlecini bir nesneyi diğerine atamak için kullandığımda, değerleri birinden diğerine kopyalar mı, yoksa ikisi de şimdi aynı verilere işaret eder mi? Veya görevlendirme operatörü bu durumda herhangi bir şey yapar mı? Yukarıdaki örnekte Bir nesneyi 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; 

, hemen eşit 8 pnt2.x etmez, ya da 4 eşit hala da, ya da 0 eşit hala mi?

Evet, bunu kendim test edebileceğimin farkındayım ve bunu yapıp topluluğun bir cevap bulmasını beklerken bunu yapacağım. Ancak, bu sorunun cevabını bir adım daha ileriye taşıyacağımı umuyorum ve javascript nesnelerini nasıl çalıştığına ve bazı en iyi uygulamalara ışık tutabileceğimi umuyorum.

soru Takip:
cevap referans kopyalandığını gibi görünüyor. pnt2 ve pnt1 şimdi aynı verilere işaret ediyor. Nesnemi, değerler kopyalanacak şekilde ayarlamak mümkün mü? Bu genellikle javascriptte nasıl başarılır? Açıkçası, bu nesneyi kopyalamamız gerektiğinde her bir özelliği tek tek ayarlamak istemiyorum.

cevap

2

O Bu beyan böylece pnt1 için ne herhangi bir değişiklik pnt2 görünecektir pnt1 nesnesine pnt2 nesneyi işaret 8.

pnt2 = pnt1 

eşittir.

1

Örneğinizde gösterdiğiniz nesne göz önüne alındığında, nesneye başvuruda bulunuluyor. Eğer ilkel bir tipse (sayı, tarih) o zaman nesneyi kopyalardı. Ben JS diğerine kopya bir nesneye gerektiğinde

14

, sadece ilkel onu at:

var newObject = JSON.stringify(oldObject); 

Sonra onu kullanmak gerektiğinde:

var evenNewerObj = JSON.parse(newObject); 

Umut bu birine yardım eder.