call
首先上一个 call 使用
|
大统上的说法就是,call 改变了 this 的指向, 然后,介绍 this xxx 什么一大堆名词,反正不管你懂不懂,成功绕晕你就已经 ok 了,但是实际发生的过程,可以看成下面的样子。
|
- 给 o 对象添加一个 add 属性,这个时候 this 就指向了 o,
- o.add(5, 7)得到的结果和 add.call(o, 5, 6)相同。
- 但是给对象 o 添加了一个额外的 add 属性,这个属性我们是不需要的,所以可以使用 delete 删除它。
so, 基本为以下三部。
|
所以我们基于 ES5 实现 call
|
基于 ES6 实现 call, 其实差别不大,es6 新增… rest,这就可以放弃 eval 的写法,如下
|
apply
apply 和 call 区别在于 apply 第二个参数是 Array,而 call 是将一个个传入
基于 es3 实现
|
基于 es6 实现
|
bind
bind() 方法会创建一个新函数。
当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this,
之后的一序列参数将会在传递的实参前传入作为它的参数。
先看一个使用 bind 方法的实例
|
首先使用 ES3 实现
|
es6 实现
|
- 本文作者: luckyship
- 本文链接: https://luckyship.github.io/2021/07/24/2021-07-24-js-call-apply-bind-source-code/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!