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

TS/JS访问类方法返回undefined,如何获取Python等效的未绑定方法?

问题核心原因

JS/TS 中的类非静态实例方法默认挂载在构造函数的prototype属性上,而非构造函数对象本身,这是和Python类设计的核心差异,你直接从类对象T上访问实例方法自然会得到undefined,同时触发TS类型报错。

实现等效操作的方法

直接从类的prototype属性上获取方法,得到的就是和Python行为一致的未绑定方法:

// 正确获取未绑定方法,等价于Python中的 P.method_a
const method_to_be_passed = T.prototype.method_a;
调用方式

拿到未绑定方法后,有两种常用的绑定调用方式,和Python的未绑定方法使用逻辑一致:

  • 临时绑定调用:使用call/apply传入实例作为this(等价于Python的self参数)后立即执行
    const t = new T();
    method_to_be_passed.call(t); // 输出 Inside method a
    
  • 生成永久绑定方法:使用bind传入实例,返回已经绑定好this的新方法,后续可以直接调用
    const boundMethod = method_to_be_passed.bind(new T());
    boundMethod(); // 输出 Inside method a
    
TS类型报错说明

TS2339报错的原因是TS将类对象T识别为构造函数类型,默认只有静态属性/方法会被定义在该类型上,实例方法的类型定义归属于T.prototype,从prototype上访问方法就不会触发类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:48:02