2013-05-04 14 views
8

Birkaç tane Javascript prototipim var. Başlangıçta, örneklerin diğer veriler için bazı genel yer tutucu bilgileriyle birlikte yalnızca kimlik numaraları doldurulur. Sonra kimliği ve nesne türü (jQuery'nin AJAX işlevini kullanarak) ile sunucuya bir ileti gönderiyorum ve sunucu tüm eksik bilgileri (ancak kimliği olmayan) bir JSON nesnesi döndürür. Döndürülen nesnedeki değişkenler, varolan nesne ile aynı adı taşır.AJAX JSON nesnesinin mevcut Nesne'ye kopyalanması

Bunu varolan boş nesneye aktarmanın en kolay yolu nedir? Ben

  • döndürülen nesne eşit nesne ayarlayın, ardından kimliği kopyalayıp birkaç alternatifleri ile geldim (prototip fonksiyonlarını kaybeder?)
  • özdeş olan bir nesneyi alır her nesne için bir işlev oluşturmak yapısı ve JSON nesnesinin anahtar-değer çiftleri yoluyla kopya veri
  • döngü ve üçüncü seçeneği kullanırsanız onları varolan nesne

kopyalamak, bu bunu yapmak için doğru yolu nedir? : json varsayılarak

for (var key in json) { 
    if (object.hasOwnProperty(key)) { 
     object[key] = json[key]; 
    } 
} 

dönen nesne olup object mevcut amacıdır.

+2

Eğer json 'sade JSON ise o zaman' hasOwnProperty' kontrolüne ihtiyacınız olduğunu düşünmüyorum. Birisi Object.prototype' ile eğlenmediyse. –

+0

Soru şu, JSON-Object'iniz ile ne yapmak istiyorsunuz? Bir nesneyi değerlendirmek istiyorsanız, JSON.parse() sizin için hile yapar. Var olan bir nesneye birleştirmek istiyorsanız, jQuery.extend() daha iyi bir öneri olacaktır. –

+0

@PaulGrime Bunu, json nesnesinde varolan 'nesnede istemediğim ekstra bir anahtarın olması durumunda bir önlem olarak yapıyorum. Fark edecekseniz, json'da anahtarlar arasında dolaşıyorum, ancak 'nesneye' karşı kontrol ediyorum. – Jaws212

cevap

8

extend() kullanarak bu deneyin:

var newObject = jQuery.extend({}, oldObject); 
+0

Sesler mükemmel! Bu işlevsellikten haberdar değildim. Ve tüm özellikleri birleştirdiği için, yaptığım herhangi bir miras hala yapışacak, doğru mu? – Jaws212

+0

Evet, haklısın. –

1

Sen jQuery.extend kullanabilirsiniz: JSON olduğunu http://api.jquery.com/jQuery.extend/

$.extend(object1,object2); 

Bir dize sonra ilk bir nesne oluşturmak:

var object1=$.parseJSON(myJsonString); 
+0

Bir Methodcall parseJSON() gerek yoktur, bu nedenle bugünlerde herkes JSON.parse() kullanabilir. jQuery başka bir şey yapmaz: if (window.JSON && window.JSON.parse) { return window.JSON.parse (data); } –

+0

ancak window.JSON.parse false ise biraz daha fazlasını yapar. – HMR

+0

ama window.JSON.parse bugün başarısız olmayacak – vvondra

İlgili konular