现在的位置: 首页 > web前端 > 正文

理解fn1 call call(fn2)

2020年07月06日 web前端 ⁄ 共 990字 ⁄ 字号 评论关闭

  调用的是fn2(这里有些绕,多念叨念叨琢磨琢磨),此时fn1.call中的this指向的是fn2。它改变了call方法(Function.prototype原型上的call)的this指向。此处调用了call方法中的this,即调用了fn2,输出了2。


  fn2问题的描述


  functionfn1(){


  console.log(1);


  }


  functionfn2(){


  console.log(2);


  }


  fn1.call(fn2);//输出1


  fn1.call.call(fn2);//输出2


  fn2具体的问题


  看到这个题目,第一反应是蒙圈的。


  fn1.call(fn2);这个是理解的。


  fn1.call.call(fn2);这个蒙圈了。


  理解


  有些绕,需要多念叨念叨琢磨琢磨。


  call方法是Function.prototype原型上天生自带的方法,所有的函数都可以调用的。


  我觉得call方法本身没有具体return什么出来,所以是undefined。


  Function.prototype.call=functioncall(context){


  //[nativecode]


  //call方法的功能


  //1.把指定函数中的this指向context


  //2.把指定函数执行


  //那么call方法中的this,即为指定函数。也就是说


  //1.把this中的this关键字指向context;


  //2.把指定函数执行this();


  };


  fn1.call(fn2);


  按照上面的理解


  call方法中的this是fn1


  把call方法中的this(fn1)中的this指向fn2


  调用call方法中的this


  所以调用的是fn1,此时fn1中的this指向的是fn2。


  但是这个方法里面并没有使用this,而是直接输出了1。


  fn1.call.call(fn2);


  按照上面的理解


  call方法中的this是fn1.call【所有函数都可以调用call,调用的是原型上call方法】


  把call方法中的this(fn1.call)中的this指向fn2


  调用call方法中的this


  总之,所以调用的是fn2(这里有些绕,多念叨念叨琢磨琢磨),此时fn1.call中的this指向的是fn2。


  

抱歉!评论已关闭.