Почему JSON.parse(JSON.stringify(obj) не копирует методы из объекта obj?
const obj = {
field: 'some txt',
someFn: function() {
return 'hey'
}
}
let newObj = JSON.parse(JSON.stringify(obj));
/* result
{
field:"some txt"
}
*/
Ответы (1 шт):
Автор решения: Максим Вишневский
→ Ссылка
Потому что JSON.stringify не поддерживает такие значения, как undefined, Function или Symbol (далее цитата из документации):
Значение undefined, функция или символ, встреченные во время преобразования, будут либо опущены (если они найдены в объекте), либо превращены в null (если они найдены в массиве).
Если вам необходимо принудительно копировать методы, то вы можете определить свой replacer, в котором будете проверять, является ли элемент копирования функцией и приводить её к строке, а затем в JSON.parse определить функцию reviver, в которой будете преобразовывать строку с телом функции в саму функцию, например конструктором Function.