2016-04-13 22 views
0

Sadece bunun neden olduğunu anlamaya çalışıyorum.Javascript nesneleri ve dizileri referanslar farklı derinliklerde farklı davranıyor davranış

Nesneler için javascript dizileri, nesneler ve başvurularla biraz deneme yapıyordum. Sonra artık anlamadığım bir noktaya ulaştım.

Nesneyi tutan bir dizi oluşturuyorum; sonra o nesneye bir referans yaptığımda ve bir özelliği değiştirdiğimde; Orijinalin ve referansın değerleri otomatik olarak değiştirilir. Açıkçası bir referans değil, bir kopya olduğu için.

Bir nesneyi başka bir nesneyle birlikte tutan ve bir nesneyi içeren bir dizi oluşturduğumda aynı şeyi bekliyordum, ancak bu durumda orijinal nesne el değmemiş halde kalıyor.

Muhtemelen Şu anda bilmediğim gerçekten basit bir açıklamaya sahiptir. Birisi bunu bana açıklayabilir mi?

Teşekkürler!

var foo = [ 
 
    { 
 
    "bar": "bar" 
 
    } 
 
]; 
 

 
var ref = foo[0]; 
 
ref.bar = "new bar"; 
 

 
console.info(foo[0].bar);    // output: new bar 
 
console.info(ref.bar);     // output: new bar 
 
console.info(foo[0].bar === ref.bar); // output: true 
 

 
var foo2 = [ 
 
    { 
 
    "bar2": [ 
 
     { "nested": "nested" } 
 
    ] 
 
    } 
 
]; 
 

 
var ref2 = foo2[0].bar2; 
 
ref2.nested = "nested 2"; 
 

 
console.info(foo2[0].bar2[0].nested);     // output: nested 
 
console.info(ref2.nested);        // output: nested 2 
 
console.info(foo2[0].bar2[0].nested === ref2.nested); // output: false

cevap

0

Her şey yolunda gidiyor. Hiçbir şey değişmedi. iyi anladın.Sadece foo2 [0] .bar2 değerini ref2 içine koymanız yeterlidir.

var ref2 = foo2[0].bar2; 

Eğer .bar2 [0] foo2 burada bir diziolduğunu görüyoruz. Eğer

*ref2.nested = "nested 2";* 

yaptığımız zaman REF2 için yeni bir nesne ekledi. ne yapmak istediğiniz ince başka

*var ref2 = foo2[0].bar2[0];* 

Ya bir şey. Javascript aynı arkadaştır. Sadece referansımızı kaybeden biziz.

+0

Teşekkürler! Gerçekten aptal ... hahaha – ius

İlgili konular