javascript中无法通过标准api直接获取bind函数的原始函数,只能通过name属性线索、调试器内部属性或手动保存引用等方式间接识别;最可靠的做法是绑定前主动保留原始函数引用。

bind 出来的函数本身不直接暴露原始函数的引用,JavaScript 规范没有提供标准属性(比如 boundFunction.source 或 boundFunction.original)来反向获取它。但可以通过几种方式间接识别或还原原始函数。
看 name 属性判断来源
绑定函数的 name 属性会自动加上 "bound " 前缀,这是最直观的线索:
-
function foo() {}→foo.bind(obj).name === "bound foo" -
(function(){}).bind().name === "bound "(空格后无名) - 箭头函数没有 name,
(() => {}).bind(obj).name也是"bound "
注意:仅靠 name 无法 100% 确认原始函数(重名可能),但结合上下文和调试器可快速定位。
用调试器展开 inspect 绑定函数
在 Chrome/Firefox 控制台中,打印绑定函数后点击展开,通常能看到内部属性(非标准但浏览器支持):
- Chrome 中可能显示
[[TargetFunction]](只读、不可访问,但可见) - Firefox 中类似显示
bound target或可展开看到源函数结构 - 这属于开发者工具的实现细节,不能用于生产代码逻辑判断
手动保留原始函数引用(推荐实践)
如果你需要后续访问原始函数,最可靠的方式是自己保存引用,而不是依赖运行时反查:
const original = function() { return 'done'; };const bound = original.bind(this, 'a');- 此时
original变量一直可用,bound.__original = original也可作为自定义标记(仅限开发/调试)
无法通过 instanceof 或 constructor 还原
绑定函数的 constructor 指向 Function,bound instanceof Function === true,但它和原始函数没有继承或构造关系。即使你用 new bound(),也只会调用原始函数(若它支持构造),但不会暴露原始函数本身。
本质上,bind 创建的是一个语义隔离的新函数对象 —— 它封装了原始函数、固定 this 和预设参数,但不提供反向链接。需要原始函数时,主动持有比事后查找更稳妥。











