Vuelva a asociar un objeto con su clase después de la deserialización en Node.js
Estoy escribiendo un marco simple de serialización / deserialización para algunos objetos específicos de la aplicación.
Considera lo siguiente:
"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
En este punto, uno puede preguntar "¿Qué significad1
tengo esod2
falta?
Un enfoque que funciona parcialmente es asignar manualmente los métodos de d1 a d2:
> d2.constructor = d1.constructor
> d2.getName = d1.getName
> d2.getName()
'fido'
Esto tiene un par de desventajas. Primero, tengo que asignar manualmente cada método de d1 a d2. En segundo lugar, d2 tiene sus propias propiedades y no comparte ranuras utilizando el mecanismo prototipo:
> d2
Dog {
_name: 'fido',
constructor: [Function: Dog],
getName: [Function] }
Entonces mi pregunta refinada es: dado un objeto (p. Ej.d2
), ¿hay alguna forma de asociarlo con el prototipo de otro objeto (p. ej.d1
) ¿Entonces hereda el mismo comportamiento?