美文网首页基础js
call apply bind改变this

call apply bind改变this

作者: 该昵称注册中 | 来源:发表于2018-03-19 14:54 被阅读0次

    call,apply,bind之间的区别

    三个都是改变上下文this

    用法:

    var oname="小王",oage=12;
    
    var Aobj = {
        age:this.age,
        name:'小杨',
        Afn:function(from,go){
            console.log(this.name+"有"+this.oage+'岁'+'来自'+from+"去往"+go)
        }
    }
    //Aobj里面的this指向window Afn里面的this指向Aobj
    console.log(Aobj.age)   //12
    console.log(Aobj.Afn())  // 小杨有undefined岁来自undefined去往undefined
    
    
    //改变this指向
    var Bobj = {
        name:'阿B',
        age:18,
        oage:20
    }
    //通过call
    Aobj.Afn.call(Bobj) //阿B有20岁来自undefined去往undefined
    //通过apply
    Aobj.Afn.apply(Bobj) //阿B有20岁来自undefined去往undefined
    //通过bind
    Aobj.Afn.bind(Bobj) //返回的是Afn方法的副本
    Aobj.Afn.bind(Bobj)()  //阿B有20岁来自undefined去往undefined
    //由上所知 bind返回的是一个改变了this的新方法,要加()才执行
    
    //传参
    Aobj.Afn.call(Bobj,'长沙','西南') //阿B有20岁来自长沙去往西南
    Aobj.Afn.apply(Bobj,['北京','西藏']) //阿B有20岁来自北京去往西藏
    Aobj.Afn.bind(Bobj,'南城','东北')()  //阿B有20岁来自南城去往东北
    
    //三个方法第一个参数都是改变this的指向,第二个参数有所差别.
    //call 传字符串 apply传的是数组 bind也是字符串
    
    //用bind把数组[a,b,c]改为函数所需要的(a,b,c)
    //例如Math.max 可以实现得到数组中最大的一项
    var arr1 = [8,4,3,2,9];
    var max = Math.max.apply(null,arr1);
    
    var arr1 = [8,4,3,2,9];
    var min= Math.min.apply(null,arr1);
    
    vararr1=new Array("1","2","3"); 
     vararr2=new Array("4","5","6"); 
    Array.prototype.push.apply(arr1,arr2); 
    //由上可知道 任何需要(1,2,3)的参数 都可以通过apply把数组转为(1,2,3)
    

    相关文章

      网友评论

        本文标题:call apply bind改变this

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