/*
bind的用法和call一样,不同的是bind的返回值是一个新函数,新函数执行时fn才会执行,
fn中的this这时被改成了obj.
fn.bind(1,2,3);
f中的this不会发生任何改变了,再用call和apply都不好用了
call和apply都是让函数立即执行了,但是bind返回一个新数组
*/
function fn(){
console.log([...arguments])
console.log(this)
return 123;
}
var obj ={
a:1,
b:2
}.
/*
fn.call(obj,1,2,3);
var f =fn.bind(obj,6,6,6);
//f执行 ,让fn执行,并且把666传给fn,fn中的this 指向是 obj
//把666理解为f的默认参数,再给f传递参数的时候,会把传递的参数补给默认参数
console.log(f);*/
Function.prototype.myBind = function myBind(context,...arg){
//this 就是 fn
var _this = this;
return function(...ary){
return _this.apply(context,arg.concat(ary));//_this.call(context,...arg)
}
}
var f2 = fn.myBind(obj,6,6,60)