美文网首页
手动实现bind

手动实现bind

作者: 呆桃冲鸭冲鸭 | 来源:发表于2021-03-10 11:16 被阅读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) 

相关文章

网友评论

      本文标题:手动实现bind

      本文链接:https://www.haomeiwen.com/subject/hobrqltx.html