2013-05-04 12 views
8

Mam kilka prototypów JavaScript. Początkowo instancje będą zawierały tylko identyfikatory, z pewnymi ogólnymi informacjami o posiadaczach miejsc dla innych danych. Następnie wysyłam wiadomość do serwera z identyfikatorem i typem obiektu (przy użyciu funkcji AJAX jQuery), a serwer zwraca obiekt JSON z wszystkimi brakującymi informacjami (ale bez identyfikatora). Zmienne w zwróconym obiekcie mają dokładnie taką samą nazwę jak te w istniejącym obiekcie.Kopiowanie obiektu AJAX JSON do istniejącego obiektu

Jaki jest najprostszy sposób przeniesienia tego do istniejącego pustego obiektu? Mam wymyślić kilka alternatyw

  • ustawić obiekt równą zwróconego obiektu, a następnie skopiować na identyfikatorze (traci funkcji prototypów?)
  • utworzyć funkcję dla każdego obiektu, który zajmuje obiekt o identycznych struktura i kopiuje dane
  • pętli par klucz-wartość obiektu JSON i skopiować je do istniejącego obiektu

Jeśli używam trzecią opcję, to jest poprawny sposób to zrobić? :

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

zakładając json jest zwracany obiekt i object jest istniejący obiekt.

+2

Jeśli 'json' jest zwykłym JSON, to nie potrzebuję nawet sprawdzenia' hasOwnProperty'. Chyba, że ​​ktoś grał na 'Object.prototype'. –

+0

Pytanie brzmi, co chcesz zrobić ze swoim obiektem JSON. Jeśli chcesz wycenić obiekt, JSON.parse() robi to za Ciebie. Jeśli chcesz połączyć go z istniejącym obiektem, jQuery.extend() będzie lepszą propozycją. –

+0

@PaulGrime Robię to jako środek ostrożności w przypadku, gdy istnieje dodatkowy klucz w obiekcie 'json', którego nie chcę w istniejącym obiekcie'. Jeśli zauważysz, przechodzę przez klawisze w 'json', ale sprawdzam przed' obiektem'. – Jaws212

Odpowiedz

8

Spróbuj używając extend():

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

Brzmi idealnie! Wcale nie wiedziałem o tej funkcjonalności. A ponieważ łączy wszystkie właściwości, wszelkie dziedziczenie, które zrobiłem, nadal będzie się utrzymywać, prawda? – Jaws212

+0

Tak, masz rację. –

1

Można użyć jQuery.extend: http://api.jquery.com/jQuery.extend/

$.extend(object1,object2); 

Jeśli JSON jest ciągiem następnie utworzyć obiekt od tego pierwszego:

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

Nie ma potrzeby stosowania metody parseJSON(), dlatego obecnie każdy może używać JSON.parse(). jQuery nie robi nic więcej: if (window.JSON && window.JSON.parse) { okno powrotu.JSON.parse (dane); } –

+0

, ale jeśli window.JSON.parse ma wartość false, zrobi to nieco więcej. – HMR

+0

, ale window.JSON.parse dziś nie zawiedzie – vvondra

Powiązane problemy