模拟bind方法实现过程
bind方法的特点:
-
必须是函数才能调用bind方法
-
调用bind方法后返回一个可调用的函数
-
调用bind方法时可以传入多个参数,一般第一个参数用于改变调用函数的this指向,剩余参数用于传给调用bind的函数
-
调用bind方法时,第一个参数为空或者null时,调用函数中的this指向window
-
调用bind方法后生成的函数在调用执行时可以传参,且参数用于传给调用bind的函数
-
如果将调用bind后生成的函数作为构造函数,利用new操作符生成实例时,之前绑定的this会失效
结合上述特点可以模拟出一个bind方法:
// 模拟bind方法
Function.prototype.bind1 = function() {
// 如果调用bind的不是函数,则抛错
if(typeof this !== 'function'){
throw new Error('Function.prototype.bind - what is trying to be bound is not callable')
}
// 获取调用bind方法的函数
var fn = this
// 获取环境变量