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

JavaScript中如何获取bind方法绑定在函数上的对应目标对象

绑定函数访问绑定对象的实现方案

核心前提

原生Function.prototype.bind返回的绑定函数,其绑定的this对象存储在JS引擎内部的[[BoundThis]]私有槽中,ECMAScript标准没有提供公开访问该属性的接口,所以默认无法直接通过f.bindedObject这种方式读取。

要实现访问需求,需要在绑定阶段主动留存绑定对象,具体实现分两种场景:


场景1:同一作用域内访问绑定对象

自定义绑定方法,在生成绑定函数的同时把绑定对象挂载为函数的自定义属性即可:

// 自定义绑定工具方法,可选择挂载到Function原型或者作为独立工具
Function.prototype.bindWithMeta = function (bindTarget, ...preArgs) {
  const boundFunc = this.bind(bindTarget, ...preArgs);
  // 把绑定对象挂载到返回的函数属性上
  boundFunc.bindedObject = bindTarget;
  return boundFunc;
};

// 你的示例改造后可直接访问
let f = function(){};
class A{}
f = f.bindWithMeta(new A());
console.log(f.bindedObject); // 正常输出绑定的A类实例

场景2:类方法中访问传入绑定函数的绑定对象

只要传入构造函数的绑定函数是通过上述自定义绑定方法生成的,直接读取挂载的bindedObject属性即可:

// 沿用上面的自定义bindWithMeta方法
Function.prototype.bindWithMeta = function (bindTarget, ...preArgs) {
  const boundFunc = this.bind(bindTarget, ...preArgs);
  boundFunc.bindedObject = bindTarget;
  return boundFunc;
};

class B{
    constructor(func){
        this.func = func;
    }

    log(){
        console.log(this.func.bindedObject); // 直接读取属性即可
    }
}

class A{}
let b = new B(function(){}.bindWithMeta(new A()));
b.log(); // 输出绑定的A类实例

特殊情况说明:如果绑定函数的生成过程不受你控制(比如是第三方库生成返回的),没有通用的标准方法可以读取绑定对象,部分运行时的非标准私有接口可能可以实现,但兼容性极差,不推荐生产环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:06:05