Heim  >  Artikel  >  Web-Frontend  >  Wie wandelt man einfache JavaScript-Objekte in Instanzen von Klassen um?

Wie wandelt man einfache JavaScript-Objekte in Instanzen von Klassen um?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-18 13:02:02971Durchsuche

How to Cast Plain JavaScript Objects into Instances of Classes?

Umwandeln einfacher Objekte in Klasseninstanzen in JavaScript

Das Erstellen echter Instanzen aus einfachen Objekten in JavaScript ist möglich, bringt jedoch bestimmte Herausforderungen mit sich. Lassen Sie uns ein praktisches Szenario und seine Lösung untersuchen.

Problem

Betrachten Sie zwei Klassen, Person und Tier. Der Server gibt ein Array generischer Person-Objekte zurück:

[
  { personName: "John", animals: [{ animalName: "cheetah" }, { animalName: "giraffe" }] },
  { personName: "Smith", animals: [{ animalName: "cat" }, { animalName: "dog" }] }
]

Das Ziel besteht darin, dieses Objekt-Array in ein typisiertes Array von Person-Instanzen umzuwandeln, um Aufrufe wie „persons[0].Animals[2].Run zu ermöglichen ().

Lösung

Das Erstellen von Instanzen aus einfachen Objekten erfordert den Aufruf ihrer Konstruktoren und die korrekte Zuweisung von Eigenschaften.

Ein allgemeiner Ansatz besteht darin, dass Konstruktoren Objekte akzeptieren, die Instanzen ähneln, und klonen ihnen. Die interne Instanzerstellungslogik wird von den Konstruktoren verwaltet.

Benutzerdefinierte Methode

Eine andere Lösung besteht darin, eine statische Methode für die Person-Klasse zu erstellen, die Objekte entgegennimmt und Instanzen generiert:

Person.fromJSON = function(obj) {
  // Custom code to create instances based on `obj`
  return ...;
};

Einfacher Ansatz für einfache Fälle

Für einfache Fälle wie Ihren, in denen es keine Konstruktoren und nur öffentliche Eigenschaften gibt, können Sie Folgendes tun:

var personInstance = new Person();
for (var prop in personLiteral)
  personInstance[prop] = personLiteral[prop];

Oder Sie können Object verwenden. zuweisen:

var personInstance = Object.assign(new Person(), personLiteral);

Verfolgen Sie einen ähnlichen Ansatz, um Animal-Instanzen zu erstellen.

Andere Implementierung

Da JSON keine Klasseninformationen übermittelt, müssen Sie die kennen Objektstruktur im Voraus. In Ihrem Fall würde die Implementierung so aussehen:

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

Zusätzliche Hinweise

Ihre Animal-Klasse definiert ihre Ausführungsmethode wahrscheinlich auf dem Prototyp und nicht auf jeder Instanz.

Das obige ist der detaillierte Inhalt vonWie wandelt man einfache JavaScript-Objekte in Instanzen von Klassen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn