实现call, apply和bind
实现call
思想
实现一个call无非就是下面几点:
- 第一个参数传入null时,this指向window。
- 第一个参数传入对象时,this指向该对象。
- 接受剩余参数传入。
- 返回函数执行的结果。
代码
1 | Function.prototype.newCall = function(context = window, ...args) { |
实现apply
思想
实现一个apply和call类似:
- 第一个参数传入null时,this指向window。
- 第一个参数传入对象时,this指向该对象。
- 接受剩余参数以数组的形式传入。
- 返回函数执行的结果。
代码
1 | Function.prototype.newApply = function(context = window, args = []) { |
实现bind
思想
bind与call和apply不同,call和apply是执行后返回函数的返回值,而bind返回的是修改后的函数却不执行。
- 第一个参数传入null时,this指向window。
- 第一个参数传入对象时,this指向该对象。
- 接受剩余参数传入。
- 返回绑定了新对象的函数。
1 | Function.prototype.newBind = function(context, ...args) { |