明白fn1.call.call(fn2);

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

形貌

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

相关文章

wow遛狗(遛狗购)

成就宠物。好像是与100个不同玩家组队完成随机副本,完成后可以得到一个称号“百折不挠的XX”,并获得一个小宠物 背包里有个笼子,右键点击狗就出来了。做海山的任务除了冲声望外,还有参与任务中的故事情节,...

网络黑客接单网是真是假?

网络黑客接单网是真是假?

在手机App中嵌入网络安全问题,再根据pc端手机软件实际操作,只需几秒,工作员便可操纵“千里”的手机镜头、音箱开展盗摄、监听,一场实际版&ldqu...

苹果手机聊天记录恢复(正确恢复聊天记录的三

共享文件可以提升文件使用效率,所以很多企业都会设置共享文件服务器,将工作中的常用文件通过共享的方式给局域网用户使用。操作系统可以设置共享,也有部分共享管理功能,但随着信息技术的飞速发展,信息安全管理越...

找黑客查看微信记录多少钱-博彩不怕黑客(真有黑客可以攻击博彩网站吗)

找黑客查看微信记录多少钱-博彩不怕黑客(真有黑客可以攻击博彩网站吗)

找黑客查看微信记录多少钱相关问题 专业黑客先做事后付款接单的平台相关问题 我是黑客 怎么找到工作 医院系统被黑客攻击案件(spd医院物流...

守宫是什么动物?小众宠物之守宫

守宫是什么动物?小众宠物之守宫

为什么会养守宫呢??? 自己是个小众宠物爱好者。比较喜欢蜥蜴、蜘蛛和蜗牛,都是比较小众的宠物。现在告诉大家为什么会选择小众宠物。首先看你比较喜欢什么类型的。带羽毛的、冷血的、带毛的、不带毛的。。。。...

国外黑客攻击某省断网(国外黑客攻击某省断网怎么办)

国外黑客攻击某省断网(国外黑客攻击某省断网怎么办)

台式电脑总被黑客攻击而断网怎么办? )如果是宽带本身的问题,首先直接联接宽带网线测试,如果是宽带的问题,联系宽带客服解决。2)如果是路由器的问题,如果原来可以用,暂时不能用了,我自己的实践是一个是断掉...