手写源码实现bind方法

385 阅读1分钟

/*

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)