美文网首页飘雪大前端
JavaScript中call,apply,bind

JavaScript中call,apply,bind

作者: wavesnow | 来源:发表于2017-05-02 22:09 被阅读1次

    call

    则是直接的参数列表,主要用在js对象各方法互相调用的时候,使当前this实例指针保持一致,或在特殊情况下需要改变this指针。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

    fun.apply(thisArg, [argsArray])
     
    function f(x,y){
      console.log(x+y);
    }
    f.apply(null, [1,1])
    

    apply

    最多只能有两个参数——新this对象和一个数组 argArray。如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里面。如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj,并且无法被传递任何参数。

    fun.call(thisArg[, arg1[, arg2[, ...]]])
     
    function f(x,y){
      console.log(x+y);
    }
    f.call(null, 1, 1)
    

    bind

    bind会返回一个改变this指向的新函数 ,注意这里强调的是新函数,其与之前的使用的不是同一块内存地址,所以当你需要重复使用这个函数的时候,你就不得不把其保存到一个变量,方便下次调用。上面的两个函数都是返回的执行结果,即调用即执行,此外,另外需要注意的地方是,bind函数中的首个参数,会自动成为返回新函数中参数的默认值,那么正式调用的时候,只需要给出除首个参数外,剩余参数即可。

    fun.bind(thisArg[, arg1[, arg2[, ...]]])
    function f(x,y){
      console.log(x+y);
    }
    f.call(null, [1,1])
    var new_fun = f.bind(null,1,1)
    //return new function
    new_fun(1)
    //return 2
    
    

    call 和 apply区别

    传入的参数列表形式不同,其中 thisArg 是你想指定的上下文,他可以是任何一个 JavaScript 对象(JavaScript 中一切皆对象),call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。

    call,apply,bind区别

    • apply 、 call 、bind 三者都是用来改变函数的this对象的指向的;
    • apply 、 call 、bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文;
    • apply 、 call 、bind 三者都可以利用后续参数传参;
    • bind是返回对应函数,便于稍后调用;apply、call则是立即调用

    相关文章

      网友评论

        本文标题:JavaScript中call,apply,bind

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