javascript - 克隆 JavaScript 函数 : anything else better than using eval?

标签 javascript oop

已编辑

注意:我已经完全编辑了这个,因为之前的问题是使用另一种方法解决的,并且我简化了这个问题,以便用我对问题的解决方案来回答自己,并与您分享我的结论。

如何通过避免使用 eval(...) 来克隆函数?

我需要获取某个给定函数的精确副本,并且这必须是与源函数不同的对象。

这就是 functionA != functionCloneOfA,包装“functionA”并从其他函数的主体中调用它对我来说不是一个解决方案。

最佳答案

您考虑过 Lasse Reichstein Nielsen 的“克隆”功能吗?本质上,它通过返回一个在其原型(prototype)链上具有该函数的新对象来“克隆”函数。道格拉斯·克罗克福德 (Douglas Crockford) 称他的版本为 "beget" .

var cloneFn = (function() {
    var F = function(){};
    return function(fn) {
        F.prototype = fn;
        return new F();
    }
}());

var myClone = cloneFn(someFn);

返回一个对象,其 [[prototype]] 是“克隆的”someFn 函数。

关于javascript - 克隆 JavaScript 函数 : anything else better than using eval?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6135586/

相关文章:

javascript - Dynamics 365 中的错误 "Cannot set property ' eventManager' of null"

javascript - 动态加载 Javascript HTML CSS 与页面重定向

javascript - Array.concat.apply() 在 chrome 和 firefox 中不同

javascript - 动态添加更多文本字段 MVC View

java - 在基类中编写一个需要在子类中覆盖的方法实现?

c# - 你能解释一下这种泛型行为吗?如果我有解决方法?

perl - 旧 TPJ 文章中的 8 queen 问题缺少到主模块 Queen 的链接

javascript - 返回数组中没有重复项的唯一元素

oop - 我将如何控制这个文本游戏以及类如何获得更好的结构来做到这一点?

java - 为什么 switch 或 if else 语句不被认为是多态的?