美文网首页
call、apply、bind 的用法

call、apply、bind 的用法

作者: AuraAura | 来源:发表于2021-09-02 13:43 被阅读0次

    红宝书上定义:每个函数都包含两个非继承而来(即在构造函数Function的 prototype)的方法。apply()和call(),在特定的作用域上调用函数,实际上等于设置函数体内this对象的值。

    apply()方法接受两个参数,第一个参数是运行该函数的作用域(即调用该函数的对象),第二个参数是函数参数数组。
    call()第一个参数和apply()一样,从第二个参数开始,是传递给函数的所有参数

    var name = 'aaa'//全局变量name
    function sayHi(a, b) {
        console.log(this.name + ',你好!说' + a + ',' + b)
    }
    var o = {
        name: 'bbb'
    }
    sayHi.call(this, 1, 2)//全局作用域下调用,this默认指向Window
    sayHi.call(o, 1, 2)//将this指向o
    sayHi.apply(this, [1, 2])
    sayHi.apply(o, [1, 2])
    
    call和apply.png

    bind()会创建一个函数实例,this的值会被绑定到传给bind()的值。bind的第一个参数和call apply 一样指定执行上下文,从第二个参数开始和call 一样,顺序传入函数的参数。

    var newSayHi = sayHi.bind({ name: 'ccc' }, 1, 2)
    newSayHi()
    
    bind.png

    sayHi.bind({ name: 'ccc' }, 1, 2)将新的ccc对象传给了this,即使在全局作用域下调用newSayHi也能将this指向ccc

    总结

    • 三者都是可以用来改变函数的this对象的指向,都可以利用后续参数传参;
    • bind 是返回this改变指向的函数,便于稍后调用;apply 、call 则是立即调用 。

    相关文章

      网友评论

          本文标题:call、apply、bind 的用法

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