Переосмысление Глубокого Клонирования

Как известно в JavaScript, объекты копируются по ссылке.

Но иногда нужно сделать глубокое клонирование объекта.

Многие js-библиотеки предлагают для этого случая собственную реализацию функции deepClone. Но, к сожалению, большинство библиотек не учитывают несколько важных вещей:

  • Объект может содержать массивы, и лучше копировать их как массивы.

  • Объект может иметь поля с символом в качестве ключа.

  • Поля объекта имеют дескрипторы, отличные от значений по умолчанию.

  • Поля объекта могут содержать функции и их тоже необходимо клонировать.

  • У объекта наконец-то появился прототип, отличный от Object.prototype.
Кому интересно почитать, полный код поместил под спойлер.

   

function deepClone(source) {

Теги: #JavaScript #Функциональное программирование #deepClone
Вместе с данным постом часто просматривают: