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
相关产品推荐
相关产品推荐

