Этот ответ предназначен для людей, которые рассматривают клонирование функции как ответ на желаемое использование, но многие из которых не на самом деле нуждаются в клонировании функции, потому что то, что они действительно хотят, - это просто иметь возможность присоединить различные свойства одной и той же функции, но объявляйте эту функцию только один раз.
Сделайте это, создав функцию создания функции:
function createFunction(param1, param2) {
function doSomething() {
console.log('in the function!');
}
// Assign properties to `doSomething` if desired, perhaps based
// on the arguments passed into `param1` and `param2`. Or,
// even return a different function from among a group of them.
return doSomething;
};
let a = createFunction();
a.something = 1;
let b = createFunction();
b.something = 2; // does not overwrite a.something
console.log(a.something);
a();
b();
Это не совсем то, что вы обрисовали в общих чертах, однако это зависит от того, как вы хотите использовать функцию, которую вы хотите клонировать. Это также использует больше памяти, потому что фактически создает несколько копий функции, один раз за вызов. Тем не менее, этот метод может решить проблему использования некоторых людей без необходимости сложной clone
функции.