Почему 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.

→ Ссылка