function fn(...args){
console.log(this,args);
};
let obj = {
myname:"张三",
};
const bindFn = fn.bind(obj);
bindFn(1,2) // this会变成传入的obj,
fn(1,2) // this指向window
手动实现:
Function.prototype.myBind = function(){
var obj = this; //保存原来的fn函数
// console.log(arguments)
context = [].shift.call(arguments) //arguments传递的类数组对象,只能在函数内部使用;转为数组,得到传入的参数中的第一个参数
leftArgs = [].slice.call(arguments); //arguments转为数组,myBind()传递的参数
// 返回一个新函数
return function () {
// console.log(arguments) //调用bind()()后返回的函数在执行的过程中接收的参数
obj.apply(context, [].concat.call(leftArgs, [].slice.call(arguments)))
}
};
const myBindTest = fn.myBind(obj);
myBindTest(1,2)