求解析:将二元函数转换为方法的methodification函数实现逻辑
解析methodification函数:将二元函数转为对象方法的原理
没问题,我来一步步拆解这个methodification函数的逻辑,帮你搞懂它是怎么把普通二元函数变成对象方法的。
先明确核心需求
我们有一个普通二元函数(比如add(a,b)),要把它改造为某个对象原型上的方法,让我们能像(3).add(5)这样调用,最终结果和直接调用add(3,5)完全一致。
先看解决方案代码
function methodification (func) { return function (b) { return func(this, b); }; }
逐行拆解逻辑
咱们把这个函数拆成三步理解:
接收目标二元函数
当我们调用methodification(add)时,外层函数的参数func就指向了咱们的add函数——也就是那个原本需要两个参数a和b的二元函数。返回一个适配方法调用的新函数
外层函数返回的是一个只接收单个参数b的新函数,这个新函数会被挂载到Number.prototype.add上,成为数字对象的专属方法。利用
this绑定自动获取第一个参数
当我们调用(3).add(5)时,这个新函数里的this会自动指向调用它的对象——也就是数字3(准确说是包装后的Number实例)。这时候,我们只需要把this作为原来二元函数的第一个参数a,把方法调用时传入的5作为第二个参数b,再调用原本的func(也就是add),就能得到和add(3,5)一样的结果了!
实际调用流程示例
把(3).add(5)的执行步骤拆解开看更清晰:
- 调用
(3).add(5)时,add方法就是methodification(add)返回的匿名函数 - 匿名函数内的
this绑定为数字3(包装成Number实例) - 函数内部执行
func(this, b),也就是add(3, 5) - 最终返回
3+5=8,和预期结果完全一致
这样就完美把原本需要两个参数的二元函数,转换成了只需要传第二个参数的对象方法,第一个参数通过this自动获取完成绑定!
内容的提问来源于stack exchange,提问作者Andrea D_
相关产品推荐
相关产品推荐

