Maison  >  Article  >  interface Web  >  Comment convertir des objets JavaScript simples en instances de classes ?

Comment convertir des objets JavaScript simples en instances de classes ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-18 13:02:02972parcourir

How to Cast Plain JavaScript Objects into Instances of Classes?

Créer des objets simples en instances de classe en JavaScript

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.

Problème

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 ().

Solution

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.

Méthode personnalisée

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 ...;
};

Approche simple pour les cas de base

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.

Autre implémentation

É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]);
  }
}

Notes supplémentaires

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn