明白fn1.call.call(fn2);

访客3年前关于黑客接单705

形貌

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

相关文章

SEO与内容营销,到底有什么区别?

也许你听过SEO,也玩过SEO,但并没有听说过内容营销。 那么,今天我们就来聊聊SEO与内容营销方面到底有什么差别,一共分为三步走: 1、SEO与内容营销是什么2、内容营销与SEO有什么区别3、紧...

蚂蚁庄园5月22日今日答案 斗牛士在斗牛时为什么要使用红色的布

蚂蚁庄园5月22日今日答案 斗牛士在斗牛时为什么要使用红色的布

今天的蚂蚁庄园每日一题的问题是和斗牛有关系的,5月22日庄园小课堂的问题是斗牛士在斗牛时为什么要使用红色的布?很多玩家都不知道答案是什么,小编我特意整理了和斗牛相关的资讯,下面小编就为大家带来了答案,...

如何恢复手机内存卡数据

手机存储卡必须联接到电脑。打开软件,挑选U盘/电话卡/照相机卡,点一下逐渐扫描仪,等候扫描仪进行,挑选修复的基本数据类型,启用要修复的文档,点一下逐渐修复,设定好修复途径,点一下逐渐修复就可以。...

我要找师傅黑客-qq黑客中心网址(网址被黑客攻击怎么处理)

我要找师傅黑客-qq黑客中心网址(网址被黑客攻击怎么处理)

我要找师傅黑客相关问题 qq黑客中心网址相关问题 黑客怎么读取苹果ID锁 黑客盗qq密码软件激活码(黑客技术盗qq密码视频)...

草根创业是不是真的不行了?

草根创业是不是真的不行了?

最近有一个说法,互联网全面进入精英时代,草根创业者互联网大势已去,互联网新贵的学历一个比一个好看,学霸成为行业主角。  当然,确实存在这个趋势,但这个事情如何解读呢? 第一、大学扩招...

如何精心设计网络优化的内容?

如何精心设计网络优化的内容?

在搜索引擎优化的进程中,你常常会发明一个问题,那就是,你之前写的一段内容,在时间之后,你发明它没有任何排名。 发生这个问题的主要原因包罗: ①内容很少被复制,链接被获取。这意味着内容质量不高。 ②你写...