Это просто и работает:
let item = {
firstName: 'Jonnie',
lastName: 'Walker',
fullName: function fullName() {
return 'Jonnie Walker';
}
Object.assign(Object.create(item), item);
Объясните:
Object.create()
Создает новый объект. Если вы передадите параметры для работы, он создаст объект с прототипом другого объекта. Поэтому, если у вас есть какие-либо функции на прототипе объекта, они будут переданы прототипу другого объекта.
Object.assign()
Объединяет два объекта и создает полностью новый объект, и у них больше нет ссылки. Так что этот пример хорошо работает для меня.