如何比较以前在javascript中绑定的函数?

如何比较以前在javascript中绑定的函数?,javascript,functional-programming,Javascript,Functional Programming,如何比较以前独立于上下文(此)绑定的函数。 我知道Function.prototype.bind返回新函数,但是否可以找到对原始函数的引用? 假设我想实现函数equalsOriginates,以便为我实现: var func1 = someFunction.bind(obj1); var func2 = someFunction.bind(obj2); var func3 = otherFunction.bind(obj1); func1 === func2; // naturally ret

如何比较以前独立于上下文(此)绑定的函数。 我知道Function.prototype.bind返回新函数,但是否可以找到对原始函数的引用? 假设我想实现函数
equalsOriginates
,以便为我实现:

var func1 = someFunction.bind(obj1);
var func2 = someFunction.bind(obj2);
var func3 = otherFunction.bind(obj1);

func1 === func2; // naturally returns false
equalsOrigins(func1, func2); // should return true
equalsOrigins(func1, func3); // should return false
equalsOrigins(func2, func3); // should return false
这在javascript中可能吗

是否有可能找到原始函数的引用

不,不需要访问引擎内部或调试器。绑定函数确实包含对目标函数的引用,但不可访问

如果函数不抛出或返回对象,最好的办法是将其作为构造函数滥用,并从原型对象重构引用

function example() { /* sane */ }
var bound = example.bind({});

Object.getPrototypeOf(new bound).constructor == example // true

我会咬:你为什么想要这个?为了理解它是如何工作的:-)我想看看这是否可能,因为获取“原始”还意味着获取上一个上下文,这在嵌套在对象中的函数中可能会很有趣。你最好的办法可能是比较
a.toString()==b.toString()
Function.prototype.toString的结果取决于实现,但在大多数情况下,它返回实际的源代码。这应该通过你的测试,但显然不允许你随意找到一个引用,除非你在某个地方跟踪你的所有函数,并可以对每个函数进行比较,直到找到匹配项。我想有人已经回答了这个问题。请找到下面的链接