You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断JavaScript中的对象是否已被bind绑定?

背景:

根据MDN bind文档描述:

调用boundFn.bind(thisArg, /* 更多参数 */)可以进一步绑定一个绑定函数,从而创建另一个绑定函数boundFn2。新绑定的thisArg值会被忽略。

文档中的示例代码展示了“新this值”(boundLog2的thisArg)会被忽略:

"use strict"; // 防止`this`被包装成包装对象

function log(...args) {
  console.log(this, ...args);
}
const boundLog = log.bind("this value", 1, 2);
const boundLog2 = boundLog.bind("new this value", 3, 4);
boundLog2(5, 6); // "this value", 1, 2, 3, 4, 5, 6

问题:

当从库中导入对象时,例如:

import obj from library

是否有办法提前检查obj是否已被绑定?我想知道obj是否是之前某次bind调用的结果,这是否可行?


没有可靠的通用方法能检测一个函数是否是bind调用的结果。

原因如下:

  • 绑定函数没有公开的标准属性或标识来区分它和普通函数。虽然部分JS引擎可能会给绑定函数添加内部属性,但这些都是非标准的,不同引擎实现不同,且无法通过常规代码访问。
  • 尝试通过name属性推断(绑定函数的name通常为bound 原函数名)并不靠谱:原函数可能无名称,name属性也可被手动修改,部分场景下该规则不生效。
  • 调用obj.bind()观察行为也无法作为判断依据,因为绑定函数再次调用bind会返回新函数,但无法反推原函数是否为绑定结果。

如果你的需求是确保函数能重新绑定this,可以尝试用call或apply强制指定this调用函数——需要注意的是,绑定函数的this是固定的,call/apply无法修改其指向,若指定不同this后函数行为无变化,大概率是绑定函数,但这也不是绝对可靠的判断方式。

内容的提问来源于stack exchange,提问作者Tamir Abutbul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 02:50:54