美文网首页JavaScript
call,bind,apply改变this的指向

call,bind,apply改变this的指向

作者: 付出的前端路 | 来源:发表于2018-07-27 16:25 被阅读0次
    var person = {
      name: "axuebin",
      age: 25
    };
    function say(job){
      console.log(this.name+":"+this.age+" "+job);
    }
    say.call(person,"FE"); // axuebin:25 FE
    say.apply(person,["FE"]); // axuebin:25 FE
    var sayPerson = say.bind(person,"FE");
    sayPerson(); // axuebin:25 FE
    

    对于对象person而言,并没有say这样一个方法,通过call/apply/bind就可以将外部的say方法用于这个对象中,其实就是将say内部的this指向person这个对象。
    可以看出,bind会创建一个新函数(称之为绑定函数),原函数的一个拷贝,也就是说不会像call和apply那样立即执行。

    总结

    三者都是用来改变函数的this指向
    三者的第一个参数都是this指向的对象
    bind是返回一个绑定函数可稍后执行,call、apply是立即调用
    三者都可以给定参数传递
    call给定参数需要将参数全部列出,apply给定参数数组

    文章来源:axuebin

    相关文章

      网友评论

        本文标题:call,bind,apply改变this的指向

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