美文网首页
apply call bind的区别

apply call bind的区别

作者: 颖小李 | 来源:发表于2020-05-11 09:50 被阅读0次

    参考文章:apply,call和bind的使用及区别
    1、用途
      1)apply,call和bind都是 用来改变this的指向
      2)apply和call会让当前函数立即执行,而bind会返回一个函数,后续需要的时候再调用执行
    2、this指向有以下四种情况:
      1)如果函数中的this没有调用对象,则this指向window(严格模式下,this为undefined)
      2)如果函数中this被不包含子对象的对象调用,则this指向调用它的对象
      3)如果函数中this被包含多级对象的对象调用,则this指向调用它的上一级对象
      4)如果我们调用了对象,并将其赋值给某个变量,然后在需要的时候再去调用执行它,则此时this也是指向的window对象,

    3.用法
    call其实是apply的一个语法糖,他们的作用都是用于改变上下文的指向,区别在于,call接受多个参数,而apply接受的是一个数组

    var db={
      name:"dema"
    }
    var obj={
        name:"obj",
        myFunc:function(from,to){
            console.log(this);
            console.log(this.name+"来自:"+from,+"去往:"+to);
        }
    }
    obj.myFunc.call(null,'北京','上海')  // this 指向window,this.name=undefined,from=北京,to=上海
    obj.myFunc.call(db,'北京','上海');  // this指向db,this.name='dema',from=北京,to=上海
    obj.myFunc.apply(db,['北京','上海']);  // this指向db,this.name='dema',from=北京,to=上海
    

    bind也是用于改变上下文的指向,它和call一样,接受多个参数。
    bind和apply,call的区别在于,bind返回一个方法,用于后面调用,apply和call会直接执行

    function print(a,b,c){
        console.log(a,b,c)
    }
    var fn = print.bind(null,'D')
    fn('A','B','C')  // D,A,B
    

    相关文章

      网友评论

          本文标题:apply call bind的区别

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