在平时的 coding 过程中,很多时候都用到了 call 方法对当前调用方法的 this 指向做了改变,那么这个 call 究竟是怎么达到这个更改当前执行环境的 this 执行的呢?
自己实现一个 call 加深对方法的认识
首先看一个例子:
1 | var test = { |
这里我们调用 obj.fn()
方法将当前 obj 下面的 name 值打印在了控制台,那么通过 call 方法改变 obj 的执行环境后就能打印出 test name 到控制台是怎么处理的呢?实现请看下面。
自己实现一个 call 方法改变当前方法调用的执行环境
1 | var test = { |
到这里,自己实现的 customCall
基本完成了一大半,那还有什么没处理完呢?
在我们调用原生的 call
方法时是可以传入参数的,那么 customCall
方法也应该改一下,最后,自己动手实现的 customCall
完整版如下:
1 | Function.prototype.customCall = function(o, ...arg) { |
总结
这里对 call 方法进行了再次的学习,从不同角度进行了更加深入的理解