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

JavaScript是否原生支持将类方法转为以this为首个参数的函数?

问题解答

目前ECMAScript标准没有提供名为unmethodize的原生顶层API,但你需要的「将类方法转为接收this作为第一个参数的普通函数的功能,可以通过已有原生API组合实现,自定义工具函数不是必须项。

你示例代码里的unmethodizedGetBar可以直接写成如下形式,和你自定义unmethodize生成的函数行为完全一致:

const unmethodizedGetBar = Function.prototype.call.bind(Foo.prototype.getBar)

原有test函数无需任何修改,运行后返回结果依然是[1, 2, 3]。

实现原理

Function.prototype.call的作用是调用目标函数,将接收的第一个参数作为函数运行时的this,后续参数作为函数的入参。我们通过bind将call方法的this固定为Foo.prototype.getBar,最终得到的新函数就会把传入的第一个参数作为getBar运行时的this,剩余参数直接透传给getBar,完全匹配你的需求。

如果你需要通用的转换工具,也可以用原生API实现得非常简洁:

const unmethodize = f => Function.call.bind(f)

这个实现和你手写的unmethodize功能完全一致,不需要额外封装逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:09:00