三兄弟的作用
call、apply、bind都是为了改变函数运行时上下文(this指向)而存在的
三兄弟的异同
1、三兄弟接收的第一个参数都是要绑定的this指向
2、apply的第二个参数是一个参数数组,call和apply的第二个以及之后的参数都是作为函数实参按顺序传入
3、bind不会立即调用,而其它两个会立即调用
call的模拟实现
实现思路:
1、定义:call是可以被所有方法调用的,所以应该定义在Function的原型上
2、传参:绑定函数被调用时,只传入第二个及之后的参数
3、绑定this:如果调用者函数被一个对象所拥有时,函数被调用时内部的this应该指向该对象
代码:
apply的模拟实现
思路与call无异,只是需要对参数进行不同处理即可
代码:
bind的模拟实现
实现思路:
1、定义:bind是可以被所有方法调用的,所以应该定义在Function的原型上
2、传参:bind函数返回一个绑定函数,最终调用需要传入函数实参和绑定函数的实参
3、绑定this:如果调用者函数被一个对象所拥有时,函数被调用时内部的this应该指向该对象
代码: