Ein Objekt nach der Deserialisierung in Node.js wieder mit seiner Klasse verknüpfen
Ich schreibe ein einfaches Serialisierungs- / Deserialisierungs-Framework für einige anwendungsspezifische Objekte.
Folgendes berücksichtigen
"use strict";
function Dog(name) { this._name = name; };
Dog.prototype.constructor = Dog;
Dog.prototype.getName = function() { return this._name; }
var d1 = new Dog('fido');
var d2 = JSON.parse(JSON.stringify(d1)); // serialize / deserialize
> d1
Dog { _name: 'fido' }
> d1.getName()
'fido'
> d2
{ _name: 'fido' }
> d2.getName()
TypeError: d2.getName is not a function
n diesem Punkt kann man fragen: "Was machtd1
habe dasd2
fehlt? "
Ein Ansatz, der teilweise funktioniert, besteht darin, die Methoden von d1 bis d2 manuell zuzuweisen:
> d2.constructor = d1.constructor
> d2.getName = d1.getName
> d2.getName()
'fido'
Dies hat ein paar Nachteile. Zuerst muss ich jede Methode von d1 bis d2 manuell zuweisen. Zweitens erhält d2 seine eigenen Eigenschaften und teilt sich keine Slots mit dem Prototyp-Mechanismus:
> d2
Dog {
_name: 'fido',
constructor: [Function: Dog],
getName: [Function] }
So ist meine verfeinerte Frage: ein Objekt gegeben (z. B.d2
), gibt es eine Möglichkeit, es mit dem Prototyp eines anderen Objekts zu verknüpfen (z. B.d1
) so erbt es das gleiche Verhalten?