Наконец, мне не нужно было клонировать функции для решения какой-то проблемы в одном из моих проектов, но я хочу поделиться с вами тем, что нашел, чтобы действительно клонировать функцию:
function cloneFunc(someFunc) {
var someFuncAsText = someFunc.toString();
return new Function
(
/\(([\s\S]*?)\)/.exec(someFunc)[1],
someFuncAsText.substring(someFuncAsText.indexOf("{") + 1, someFuncAsText.lastIndexOf("}"))
);
}
Я не совсем уверен, что это лучший подход, но он создает анонимную функцию, которая является точным клоном исходной функции, но оба являются разными объектами.
Возможно, использует какой-то "eval", потому что я строю функцию с помощью этого конструктора объекта Function, но я считаю, что это более элегантно, чем фактическое использование eval (...) .