Сообщение от Launder
|
Ну, то есть, даже вот такую простейшую функцию со своими свойствами(да, по-видимому и без них) - не склонировать?
|
такую - можно) Но в общем случае функция может хранить внешние переменные в замыкании, либо быть стрелочной функцией и держать кого-то за this. И вот это мы не склонируем.
Можно сделать обертку, которая будет вызывать исходную функцию:
function cloneFunc(f) {
if (!f) { return null; }
var args = Array.from({length: f.length}).map((v, i) => 'a' + i).join(',');
var newFunc = new Function('f', 'return function (' + args + ') { return f.call(this, ' + args + '); }')(f);
return Object.assign(newFunc, f);
}
здесь костыль с "new Function" позволяет сохранить length исходной функции, так то можно и проще сделать.
----
если у нас глубокое копирование, то вместо Object.assign надо свою функцию использовать, я так уж для примера написал