bind函数的实现
bind
可以分为多次传入参数,bind
是返回绑定this之后的函数
Function.prototype.mybind = function(thisArg,...argArray){
//1.获取到真实需要调用的函数
var fn = this;
//2.绑定this
//如果是null或undefined,就绑定window,如果不是,那就统一转换成Object类型(这里主要针对基本数据类型,但调用Object()对引用数据类型没有影响)
thisArg = (thisArg !== null && thisArg !== undefined) ? Object(thisArg):window;
//最后要将proxyFn函数返回,(因为:`bind`是返回绑定this之后的函数,不会立即执行)
function proxyFn(...args){
//3.将函数放到thisArg中进行调用,相当于将真实需要调用的函数变成传入的对象的属性
thisArg.fn = fn;
//特殊:将两个传入的参数进行合并,(因为:`bind`可以分为多次传入参数)
var finalArgs = [...argArray,...args];
var result = thisArg.fn(...finalArgs);
delete thisArg.fn;//最后要将这个属性从传入的对象上删除
//4.返回结果:将真实需要调用的函数的返回值返回
return result;
}
return proxyFn;
}