Повторное связывание объекта с его классом после десериализации в Node.js

Я пишу простую платформу сериализации / десериализации для некоторых специфичных для приложения объектов.

Учтите следующее:

"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

На данный момент можно спросить "Что делаетd1 есть этоd2 не хватает?»

Один из подходов, который частично работает, состоит в том, чтобы вручную назначать методы от d1 до d2:

> d2.constructor = d1.constructor
> d2.getName = d1.getName
> d2.getName()
'fido'

Это имеет пару недостатков. Во-первых, я должен вручную назначить каждый метод от d1 до d2. Во-вторых, d2 получает свои собственные свойства и не разделяет слоты, используя механизм прототипа:

> d2
Dog {
   _name: 'fido',
  constructor: [Function: Dog],
  getName: [Function] }

Итак, мой уточненный вопрос: дан объект (например,d2), есть ли способ связать его с прототипом другого объекта (например,d1) так что наследует такое же поведение?

Ответы на вопрос(2)

Ваш ответ на вопрос