明白fn1.call.call(fn2);

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

形貌

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米代金券、领会最新阿里云产物的种种优惠流动点击进入

相关文章

小米账号密码忘了怎么办?申诉以及快速找回的

小米账号密码忘了怎么办?申诉以及快速找回的

从当年小米1代发布,到最新款的红米Pro登场。雷军和他的的小米科技,为我们带来多款小米手机。与此同时,小米手机的安全指数也在直线上升。 若是“忘记”小米手机的帐号密码,导致手机被锁。此时,你或许...

找黑客盗号要多少钱详细讲解各种黑客盗号技术

注意:本篇文章仅建议在非公共 WiFi 环境下阅读,否则后果自负 我和一位黑客朋友来到了一家咖啡馆中。然而,就在不到20分钟的时间里,他就知道了咖啡厅里这些使用公共WiFi上网的用户的出生地、曾就读...

怎么同步老婆的微信不被发现(同步接收老婆微信聊天记录)

怎么同步老婆的微信不被发现(同步接收老婆微信聊天记录)我们每个人基本上都有自己的微信,和朋友们聊天越来越多用的都是这个通讯软件了,相较于其他通讯软件而言,微信不仅简洁好用还有很多我们还未发现的小技...

如何找真正的黑客帮忙?哪里能找到靠谱的黑客

dplyr专注处理dataframe对象, 并提供更稳健的与其它数据库对象间的接口。 一、5个关键的数据处理函数: select() 返回列的子集 filter() 返回行的子集 ar...

黑客帝国hbomax(黑客帝国1)

黑客帝国hbomax(黑客帝国1)

sense8的演职员表 1、Cepheus阿梅尔·艾米恩Aml Ameen 内罗毕司机,有着强烈的正义感,拼命挣钱给他患有艾滋病的母亲买药,喜欢Jean-Claude Van Damme的作品,并将他...

微信二维码如何设置支付密码

以微信7.0.19版本号为例子,设置微信交易密码的方式以下:      1、在手机上点一下进入微信。   2、点一下右下方的我,挑选付款。   3、随后点一下右上方三个点,挑选改动交易密码。  ...