手动实现bind

2021-03-10  本文已影响0人  呆桃冲鸭冲鸭
   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) 
上一篇下一篇

猜你喜欢

热点阅读