明白fn1.call.call(fn2);

访客4年前关于黑客接单723

形貌

function fn1(){
    console.log(1);
}
function fn2(){
    console.log(2);
}
fn1.call(fn2); // 输出1
fn1.call.call(fn2); // 输出2


问题

看到这个问题,之一反应是蒙圈的。

fn1.call(fn2); 这个是明白的。
fn1.call.call(fn2);这个蒙圈了。


明白

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


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


我以为 call方式自己没有详细return什么出来,以是是undefined。

Function.prototype.call=function call(context){
    // [native code]
    // call方式的功效
    // 1. 把指定函数中的this指向context
    // 2. 把指定函数执行
    
    // 那么call方式中的this,即为指定函数。也就是说
    // 1. 把this中 的 this关键字指向context;
    // 2. 把指定函数执行this();
};


fn1.call(fn2);

根据上面的明白

  1. call 方式中的this是fn1
  2. 把call方式中的this(fn1)中的this指向fn2
  3. 挪用 call方式中的this

以是挪用的是 fn1 ,此时fn1中的 this 指向的是 fn2。
然则这个方式内里并没有使用this,而是直接输出了1。


fn1.call.call(fn2);

根据上面的明白

  1. call 方式中的 this 是 fn1.call【所有函数都可以挪用call,挪用的是原型上call方式】
  2. 把call方式中的this (fn1.call) 中的this 指向fn2
  3. 挪用call方式中的this

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


来自:https://segmentfault.com/a/1190000019654594


思源资源网:分类流动

1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入

相关文章

黑客帝国多少分钟(黑客帝国2多少分钟)

黑客帝国多少分钟(黑客帝国2多少分钟)

本文目录一览: 1、黑客帝国1为什么就5分钟 2、黑客帝国每部时间大约多长? 3、黑客帝国2锡安狂欢在第几分钟 4、黑客帝国1为什么只有5分钟 5、黑客帝国的三部,分别是多少分钟的电影...

眼病有哪些?4种眼病,要及早处理治疗!

眼病有哪些?4种眼病,要及早处理治疗!

眼病有哪些(4种眼病,要及早处理治疗!)眼睛对于身体来讲是非常重要的,通过眼睛能感受到外界的美好,而在生活中有一些人因为不注意让自己的眼部受到影响而发生疾病,在发生疾病的时候如果没有特别注意并且及时治...

怎样自己在家酿酒(家庭酿酒方法,记住这个顺口溜)

  俗话说得好“酒是粮食精,越喝越年青”,虽然这句话不认真细致。可是也表明了,我们国人中酒的钟爱。殊不知如今目前市面上大部分白酒是液态法白酒,也就是酒精勾兑的乙醇酒。   因此制酒大史兄,想教酒鬼们用...

猴年马月是什么意思(猴年马月是说的什么时候

猴年马月是什么意思(猴年马月是说的什么时候

每当人们觉得某事遥遥无期,甚至不可能实现时,就会用“猴年马月”表达内心的无奈,久而久之,该成语就成了世人的口头禅。然而,此处的“马月”究竟指的是几月份,多少年才能出现一次“猴年马月”的情况呢?估计很多...

世界最贵的烟?世界十大最贵香烟排行榜

世界最贵的烟?世界十大最贵香烟排行榜

虽然吸烟有害健康,但吸烟人数一直在上升,而且从未减少。大多数吸烟的人只花几十元买一盒烟,奢侈的也只有几百元。但对富人来说,他们抽的烟和普通人完全不同,光是价格就要高得多,下面和小编一起来看看世界十大最...

黑客帝国谁真正看懂了(黑客帝国没看明白)

黑客帝国谁真正看懂了(黑客帝国没看明白)

本文目录一览: 1、谁看懂黑客帝国了? 2、《黑客帝国》三部曲谁全看懂了,给俺说说? 3、博大精深的《黑客帝国》三部曲看了N遍了,还是没全看懂,哪位高手给个正解啊,还有他还会继续拍第四部吗?...