美文网首页
js this的指向,apply,call,bind的用法

js this的指向,apply,call,bind的用法

作者: xiao_xie_shen | 来源:发表于2019-01-17 17:14 被阅读0次

    this指向


    this指向上一级调用它的对象
    //例1
    var obj1 = {
        a: 10,
        b: function(){
           alert(this.a);
        }
    }
    
    obj1.b();//将输出 10,this即是obj1
    
    //例2
    var obj2 = {
        a: 10,
        b: function(){
            alert(this.a);
        }
    }
    
    var newFuc = obj2.b;
    newFuc();//将输出 undefined,this即是window,因为调用newFuc是全局下调用
      
    

    apply,call,bind用法


    apply,call,bind都是用来解决上例2 this指向作用域指向非我们想指向的位置时,明确定位this
    //衔接以上例2
    //例3
    var obj2 = {
        a: 10,
        b: function(){
            alert(this.a);
        }
    }
    
    var newFuc = obj2.b;
    newFuc.apply(obj2);//输出10,因为使用apply将this指向obj2达到所要效果
    newFuc.call(obj2);//输出10,因为使用call将this指向obj2达到所要效果
    newFuc.bind(obj2)();//输出10,因为使用bind将this指向obj2达到所要效果
    
    第一参数都是传入所需this,后续参数也可以为函数传入所需参数。apply传参以数组的形式,将函数所需参数依次放入数组即可。call和bind传参从第二位开始依次传入即可。
    var obj3 = {
        a: 10,
        b: function(param1,param2){
            alert(this.a + param1 + param2);
        }
    }
    
    var newFuc = obj3.b;
    newFuc.apply(obj3,['个','人']);//输出 10个人
    
    newFuc.call(obj3,'个','人');//输出 10个人
    
    newFuc.bind(obj3,'个','人')();//输出 10个人
    
    
    • [x]以上要注意bind返回的是函数,所以必须再次执行才生效。

    相关文章

      网友评论

          本文标题:js this的指向,apply,call,bind的用法

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