美文网首页
bind的运用和bind的实现

bind的运用和bind的实现

作者: isSunny | 来源:发表于2019-07-05 20:20 被阅读0次
1.bind和call,apply一样都是改变this指向的

原理是使用bind方法,会将函数绑定到指定的对象上,这个时候函数体内的this会被绑定到bind方法的第一个参数值上,这个时候该函数体内的this就会自然而然的指向第一个参数。而和call,apply的区别在于bind方法需要调用执行。

    function objj(){
        console.log(this.s2);
    }
    var fn4 = {
        s2 :3
    }
    var s2 = 4;

    objj.bind(fn4)(); //3
1.bind的柯里化(Curry)

我理解的柯里化就是把接受多个参数的函数变为接收单一参数,并且返回接受剩下的参数并且返回结果的新函数。

function Add(b,c){
        console.log(b+c);
    }
    var bat = Add.bind(null,1);
    bat(2);//3
 function fns(a,b){
        return this.f+a+b;
    }
    var bas = fns.bind({f:2},3);
    console.log(bas(4));//9

bind实现

Function.prototype.mybind =function(){
        //保存this;
        var slef = this;
        //将参数第一个接取出来保存,就是需要绑定的this;
        var context = Array.prototype.shift.call(arguments);
        //把剩余的参数转变成数组
        var arg = Array.prototype.slice.call(arguments);
        return function(){
            //返回一个新函数,
            //将mybind剩余的参数数组和调用mybind所返回的函数在执行的过程中接收的参数拼接起来,用apply方法改变this指向为context上。
slef.apply(context,Array.prototype.concat.apply(arg,Array.prototype.slice.call(arguments)));
        }
    }

    function fff(m,f,g){
        console.log(this.a+""+m+""+f+""+g);
    }
    var sss2 = {
        a:1
    }
    fff.mybind(sss2,1,2)(3);

相关文章

网友评论

      本文标题:bind的运用和bind的实现

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