Heim > Artikel > Web-Frontend > Wie wandelt man einfache JavaScript-Objekte in Instanzen von Klassen um?
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.
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 ().
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.
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 ...; };
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.
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]); } }
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!