Глубокое слияние двух экземпляров класса - PullRequest
0 голосов
/ 11 сентября 2018

Как правильно выполнить глубокое слияние (например, lodash) двух экземпляров класса ES6 ?
Результирующий объект должен быть фактическим экземпляром того же класса , а его свойства должны быть глубоким слиянием свойств двух экземпляров.

1 Ответ

0 голосов
/ 12 сентября 2018

Если нет необходимости создавать новый экземпляр, следующее сделает

_.merge(instance1, instance2)

. Это позволит глубоко объединить свойства instance2 в instance1 при сохранении прототипа.


Если объединенный экземпляр должен быть совершенно новым объектом, он все еще достижим:

let newInstance = Object.assign(Object.create(Object.getPrototypeOf(o1)), _.merge(o1, o2));

Это создаст новый объект, который является экземпляром того же класса o1есть и глубоко погрузит в него свойства o1 и o2.
Этот подход, однако, имеет некоторые оговорки, например (из здесь ):

Это вряд ли возможно, если экземпляр был создан с интенсивным использованием замыканий в функции конструктора.Мы можем никогда не узнать, какие внутренние значения были установлены и как воспроизвести такую ​​настройку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...