Комментарии 11
Переполнение стека там тоже не предусмотрели. Всё как в lodash.
structuredClone(Array.from({length: 100000}).reduce(a => ({a})))
Так что если у вас объект "совсем произвольный", то надо промыслить нерекурсивный вариант...
----
const shallowCopy = Object.create(simpleEvent)
Эх, Стив, Стив..
"Что structuredClone не может клонировать
Функции"
Ну и зачем он тогда такой нужен
Ясно понятно
.cloneDeep по-прежнему рулит
P.S. За статью спасибо
Ну и зачем он тогда такой нужен
для клонирования данных.
Ещё важно, что она использует ровно тот же самый structured clone алгоритм, что и другие места спецификации, например, отправка сообщений воркерам.
Это, думаю, и есть одна из основных причин, почему не клонируются функции - в воркерах просто не будет загружен ее код.
StructuredClone и вправду отличная функция. Если кто то клонирует функции - то тут надо задуматься.
Object.assign рекурсивно вызывать можно и не нужен lodash
Необходимость в клонировании данных, вне зависимости от языка - индикатор фундаментальной ошибки в архитектуре приложения, или, для случая JS - не знание особенностей базовой архитектуры языка.
По этой причине, разработчики JS, которые являются очень неглупыми людьми, даже не допускали необходимости в подобных методах.
Исключением могут быть только очень специфические задачи системного характера, которые при помощи языка JS, в настоящий момент решать невозможно.
Интересно какие use case могут быть при клонировании объектов с функциями ? не разу не сталкивался с такими случаями, а вот клонировать глубоко вложенные объекты приходилось как то, так что думаю встроенная функция в языке очень даже неплохо.
Современный способ глубокого клонирования объектов в JavaScript