2012-12-18 24 views
9

Sayfa yüklenirken, iki Javascript nesnesi, objDemo1 ve objDemo1Backup oluşturuyorum.Bir javascript nesnesini başka bir nesneyle değiştirin

örn.

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

ben sub_ değerleri değiştirebilir yanı sıra eklemek/yeni sub_ 's silmek ama düzenlediğimden tek nesne objDemo1 olduğunu olabilir. yani ben bir sıfırla düğmesi bulunur objDemo1Backup

değişmeyeceğimizi arka sayfa başlangıçta yüklendiğinde ne olduğu için objDemo1 sıfırlanır tıklandığında (yani objDemo1 = objDemo1Backup). Burada sorun yaşıyorum ..

objDemo1'u objDemo1Backup olarak nasıl ayarlayabilirim?

denedim:

objDemo1 = objDemo1Backup; 

ve

objDemo1 = null; 
var objDemo1 = objDemo1Backup; 

... yanı sıra benzer varyasyonları ama işe yaramış gibi görünüyor. Herhangi bir fikrin var mı?

  • Not: Ben sıfırlama noktasındaki onaylayabilir, objDemo1Backup bunu oluşturulan ve objDemo1 değiştiğinde olduğu gibi tamamen aynıdır.
  • Kodum kesinlikle "reset" işlevine isabet ediyor, burada objDemo1 = objDemo1Backup denedim ... Nesnenin yerini alacak sözdizimini anlayamıyorum. JavaScript nesnelerinde, hiçbir zaman değere göre, referans olarak geçirilir.
+1

Neler olup bittiğini varsayalım, hem 'objDemo1' hem de 'objDemo1Backup' aynı nesneyi gösterdiğinden, birini değiştirdiğinizde her ikisi de değişir. Bu sezgisel görünmeyebilir, ancak javascript'in çalışması budur. Daha fazla bilgi için Google ** "javascript clone object" **. – Shmiddty

+1

Nesne başvurusu ile oynuyorsunuz, klonlama değil. = – LittleSweetSeas

cevap

7

Yani:

var objDemo, objDemoBackup; 
objDemo = { 
    sub_1: "foo"; 
}; 
objDemoBackup = objDemo; 
objDemo.sub_2 = "bar"; 
console.log(objDemoBackup.sub_2); // "bar" 

bir kopyasını elde etmek için, bir fotokopi işlevini kullanmalısınız. JavaScript doğal bir tane yok ama burada bir clone uygulamasıdır: 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

kullanarak nesneyi klonlamalısınız. Yani objDemo'yu ne sıfırlamak istedim, ne objDemoBackup bir klonlama noktasıydıysa, şunu yapardım: 'objDemo = clone (objDemoBackup);' –

+0

Evet, tekrar klonlamalısınız ya da bir referansla bitireceksiniz :) – Halcyon

+0

İyi şeyler, 'clone()' işlevini kullanarak çalışmaktadır. –

12

Ben angularjs kullanıyorum ve bana başka bir nesneye bir nesne kopyalamak için öğrenmek için biraz zaman aldı. Normalde açısal kopya burada klon arayarak bir nesne klon almak ya edeceğiz: Bu kaynak nesnenin (yeni bir referansla) size yeni klonlanmış örneğini verir

var targetObj = angular.copy(sourceObj); 

. Ama dokümanlar içine hızlı bir bakış ikinci parametre kopyalamak ortaya koymaktadır:

angular.copy(sourceObj, targetObj) 

Bu şekilde de hedef referansı nesneleri tutmak kaynağı ve alanlarında ve yöntemlerle bir hedef nesne geçersiz kılabilir.

+2

Tam olarak aradığım şey. Angular.copy'nin hedef nesne alabileceğini bilmiyordum. Teşekkürler! –

+0

Bu soruda AngularJS etiketi yok. –

İlgili konular