Creación de un objeto en JavaScript requiere la invocación de su constructor . Entonces, al principio necesitarás encontrar los argumentos correctos, que no siempre pueden ser solo propiedades. Después de eso, puede reasignar todas las propiedades públicas del objeto analizado por JSON a las instancias creadas.
Una solución general sería que cada constructor acepta objetos que parecen instancias (incluidas las instancias reales) y los clona. Toda la lógica interna necesaria para crear instancias adecuadas se ubicará en el lugar correcto.
o incluso mejor que la sobrecarga del constructor podría ser la creación de un método estático en su clase que toma objetos y crea instancias de ellos:
Person.fromJSON = function(obj) {
// custom code, as appropriate for Person instances
// might invoke `new Person`
return …;
};
Su caso es muy simple, como usted don' t tiene argumentos y solo propiedades públicas.Para cambiar {personName:John,animals:[]}
a una instancia de objeto, utilice esto:
var personLiteral = ... // JSON.parse("...");
var personInstance = new Person();
for (var prop in personLiteral)
personInstance[prop] = personLiteral[prop];
También puede utilizar Object.extend
funcionalidad para esto, en caso de tener uno disponible (por ejemplo, jQuery):
var personInstance = $.extend(new Person(), personLiteral);
La creación de los Animal
casos funciona análogamente
Como JSON no transporta ninguna información sobre las clases, debe conocer la estructura antes. En su caso, será:
var persons = JSON.parse(serverResponse);
for (var i=0; i<persons.length; i++) {
persons[i] = $.extend(new Person, persons[i]);
for (var j=0; j<persons[i].animals; j++) {
persons[i].animals[j] = $.extend(new Animal, persons[i].animals[j]);
}
}
Por cierto, sus métodos run
parece probable que se añadan en el Animal.prototype
objeto en lugar de cada instancia.
Su pregunta no está clara. Las matrices de JavaScript no están escritas. (Bueno, hay nuevas cosas tipo matriz que se escriben pero las matrices básicas no). – Pointy
El código que dice que quiere usar implica que la matriz Persona que está recuperando del servidor contendrá objetos, p. '[{Animal: [...]}, {Animal: [...]}]' - ¿es eso lo que quieres decir? – JMM
Agregué el código de muestra. Creo que la pregunta es clara ahora. – ozz