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

