//自定义一个函数
function a(value1,value2){
console.log(this,value1,value2)
}
a(1,2); //window 1 2
//这里第一参数是一个数组,后面的参数就相对应的是value1,value2
a.bind([],1,2)(); //Array [] 1 2
a.bind([],1)(2); //Array [] 1 2
//将自定义_bind函数保存到函数原型中,因为所有函数对象都是由函数原型创建
Function.prototype._bind = function (){
//将函数对象保存到变量中
let self = this;
//将当前函数中的arguments对象通过es6中的对象扩展运算符转化成数组对象(这样做便于使用数组对象中的方法操作数据)保存到变量中
let obj = [...arguments];
//获取参数数组对象obj中除首个元素以外的数组对象
let args = obj.slice(1);
//返回一个可执行函数,使得函数对象调用_bind()方法时不直接执行原函数
return function (){
//使用函数对象中的apply方法,这里的arguments是当前函数的
self.apply(obj[0],args.concat([...arguments]));
}
}