美文网首页
call,apply,this指向

call,apply,this指向

作者: 云淡风轻_301b | 来源:发表于2017-11-07 21:10 被阅读0次

    每个函数都包含两个非继承而来的方法call()和apply(),这两个方法都是在特定的作用域中调用函数,等于设置函数体内this对象的值。

    apply()方法接收两个参数:
    第一个:指当前对象,也就是正在调用这个函数的对象
    第二个:数组,例:fn.apply(this, ["name", "jeck"]);或数组对象,例:fn.apply(this, new Array("name", "jeck"));或arguments对象

    call()方法接收两个参数:
    第一个:指当前对象,也就是正在调用这个函数的对象
    第二个:参数列表,例:fn.call(this, num1, num2, num3);

    🌰://call方法,可以改变this的指向,this写在括号中

     var a={
       name:"小米",
       eat:function(num,num1){
       console.log("eat"+num+num1,this)
      }
    }
     var b ={name:"app"};
     a.eat.call(b);//this指向b
     a.eat.call(red);//this指向red
     a.eat.call(this);//this指向window
     a.eat.call()//this指向window
     a.eat.call(b,"香蕉","菠萝");//函数带有参数的时候,把this写在参数的后面
    
    //apply:同call,区别:带有参数时传的是数组 
    a.eat.apply(b,["栗子","冬瓜"]);
    

    this的指向
    1.谁调用的方法,this就指向谁

    function test(){
      console.log("test方法");
      return function(){
      console.log("哈哈哈哈")
      }
     }
     console.log(window.test,this);//this指window
    

    2.直接调用方法,this指向window
    给red添加点击事件

    ①red.onclick=test();//返回值
    ②red.onclick=test;//执行点击方法的时候调用了test
    red.onclick();//this指向red
    test()//this指向window
    

    3、定时器里的this指向window;

     function test(){
      var _this = this;//下划线this是red
      setTimeout(function(){
        console.log("test方法",_this);
    },1000)
    

    }

    相关文章

      网友评论

          本文标题:call,apply,this指向

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