美文网首页
call() bind() apply()改变this指向

call() bind() apply()改变this指向

作者: 扶得一人醉如苏沐晨 | 来源:发表于2022-06-04 07:02 被阅读0次

    1、call 函数的用法:

    fn.call(obj,1,2);

    A、call() 函数中的第一个参数表示:想让 fu的this 指向的对象 (obj);

    B、call() 函数中的第二及以后参数表示:传进fu的实参;

    2、call 函数的功能:

    1)让函数立执行;

    2)可改变 this 的指向;

    3)可实现继承问题;

    1.函数调用

    2.改变this指向

    3)可实现继承问题;

    2、apply函数的用法

    apply作用

    作用有三个,跟它的入参有关。

    让函数立即执行

    改变this指向。

    将数组入参变为一般入参。

    可以这么记,当apply调用时,调用apply的函数是谁?(person.fullName),把这个函数分享给person1,让person1去调用。


    数组入参变为一般入参

    这里说一点,就是这个作用就是apply和call的最大区别了。

    就是apply的第二个参数接受的是数组,call不是。

    比如当一个函数入参是非数组,而你目前拥有的是数组,你不想处理数组再进行入参的输入,你就可以使用apply。

    需要注意的是这里的第一个值为null时,

    在 “JavaScript 严格模式”下则它将成为被调用函数的所有者(对象)也就是没改变指向,在“非严格”模式下,它成为全局对象。

    因为我们只是测试第二个入参作用,因此,第一个入参null就用来占位,就算改变了指向我们也没有用到它。

    以下的例子可以加深一下你对apply和call区别的理解。

    3、bind函数的用法()


    bind()方法创建一个新的函数(称为绑定函数), 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。

    需要注意的是bind 是返回新的函数,以便稍后调用;apply 、call 则是立即调用原函数 。

    fun.bind(thisArg,arg1 ,arg2)


    bind的应用

    1)可以对一个函数预设初始参数:

    2)配合 setTimeout

    setTimeout 是一个场景,很容易把 this 指向 window,下面的代码是有问题的,render 方法中的 this 其实被指向了 window!我们可以用 bind,显式地把 this 绑定到回调函数以便继续使用该对象。

    window.setInterval(canvas.render.bind(canvas), 1000);

    3)js bind的多次绑定只有第一次是有效的

    相关文章

      网友评论

          本文标题:call() bind() apply()改变this指向

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