Показать сообщение отдельно
  #5 (permalink)  
Старый 29.07.2019, 18:38
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Можно всё скопировать кроме внутренних полей!

var sum = function(a, b) {
	return a + b;
}
sum.a = 'Masha';
sum.b = 'Phedya';

function cloneFunction(fn) {
	return Object.assign({ __proto__: fn.constructor.prototype }, fn);
}

var sum2 = cloneFunction(sum);
console.log(sum2);


Но такую функцию вы не можете вызвать как функцию, поскольку у неё нет внутреннего поля [[Call]]. В JS нет публичного механизма для чтения и копирования внутренних полей (так называемые слоты), поэтому невозможно произвести ручное копирование некоторых объектов, которые были созданы при помощи встроенных конструкторов (например, функции, промисы и т. д.), если только класс не предоставляет метод для копирования объекта (как например метод cloneNode у класса Node!)

А зачем вам именно копия функции?

Последний раз редактировалось Malleys, 29.07.2019 в 18:45.
Ответить с цитированием