Créer des instances réelles à partir d'objets simples en JavaScript est possible mais comporte certains défis. Explorons un scénario pratique et sa solution.
Considérons deux classes, Personne et Animal. Le serveur renvoie un tableau d'objets Person génériques :
[ { personName: "John", animals: [{ animalName: "cheetah" }, { animalName: "giraffe" }] }, { personName: "Smith", animals: [{ animalName: "cat" }, { animalName: "dog" }] } ]
L'objectif est de convertir ce tableau d'objets en un tableau typé d'instances Person pour permettre des appels tels que des personnes[0].Animals[2].Run ().
Créer des instances à partir d'objets simples implique d'appeler leurs constructeurs et d'attribuer des propriétés correctement.
Une approche générale consiste à demander aux constructeurs d'accepter des objets qui ressemblent à des instances et de les cloner. eux. La logique de création d'instance interne est gérée par les constructeurs.
Une autre solution consiste à créer une méthode statique sur la classe Person qui prend des objets et génère des instances :
Person.fromJSON = function(obj) { // Custom code to create instances based on `obj` return ...; };
Pour les cas simples comme le vôtre, où il n'y a pas de constructeurs et uniquement des propriétés publiques, vous pouvez faire ceci :
var personInstance = new Person(); for (var prop in personLiteral) personInstance[prop] = personLiteral[prop];
Ou, vous pouvez utiliser Object. assign :
var personInstance = Object.assign(new Person(), personLiteral);
Suivez une approche similaire pour créer des instances Animal.
Étant donné que JSON ne transmet pas d'informations de classe, vous devrez connaître le structure de l'objet à l'avance. Dans votre cas, l'implémentation ressemblerait à ceci :
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]); } }
Votre classe Animal définit probablement sa méthode d'exécution sur le prototype, plutôt que sur chaque instance.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!