对call
、bind
和apply
三个库函数的实现
call
1 | Function.prototype.myCall = function (context) { |
apply
1 | Function.prototype.myApply = function (context) { |
bind
- 不传入第一个参数则默认为window
- 改变了
this
指向,让新的对象可以执行该函数。那么思路是否可以变成给新的对象添加一个函数,然后再执行完后删除。
1 | Function.prototype.myBind = function (context) { |
原理
事实上对于这三个库函数的实现离不开三个东西(变量?属性?指针?)arguments
、context
、this
。
其中我们将this
存储与临时变量中以便于绑定原本的函数,而context
则是参数列表arguments
中的第一个参数,用于代表环境变量。
更详细的部分我在《执行上下文对象Context》中有写,感兴趣的 boy 可以去看一下