明白fn1.call.call(fn2);

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

形貌

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

相关文章

怎么偷偷登陆爱人微信不让对方知道

. 在幼儿园甚至是在小区孩子们一起玩的时候。总有一些孩子成为被欺负的对象。虽然说这可能是一件很正常的事,但是经常如此的话家长就需要注意了。孩子被欺负作为家长来说有着不可推卸的责任。家长们自身很大的问...

打开qq群有可能被黑客攻击吗

你是不是下载软件了,那些软件是免杀木马,你被安装远控了. 我也这样,删除并退出后依然收到那些信息,这明显就是一个bug.刚刚试了一下进入“设置--退出-退出当前账号”然后再登陆,才没收到那些群聊的消息...

wangle输了20万 熬不住了,黑客的联系,去哪找网络黑客

或import java.util.regex.Matcher;0x 衔接逻辑剖析仪终究,谢谢我有一把刷子、zhuliang、泉哥、lake2在整个破解历程中的支持。 -fmax_fail-ma...

找一部黑客的连续剧-最简单的黑客入门教程大全(黑客基础菜鸟入门教程写代码)

找一部黑客的连续剧-最简单的黑客入门教程大全(黑客基础菜鸟入门教程写代码)

找一部黑客的连续剧相关问题 简单黑客攻击教程相关问题 怎么样成为一名黑客呢 黑客平台赚钱软件(黑客交易平台) 苹...

互联网创业(2019年5大互联网创业项目分析)

互联网创业(2019年5大互联网创业项目分析)

互联网创业(2019年5大互联网创业项目分析)路漫漫其修远兮,吾将上下而求索!大家好,我是逍遥大侠,今天我们来聊聊2019年5个可以操作的暴利项目,话不多说,我们开始分析! 1、知识付费  ...

安卓手机软件安装?手机app的安装有哪些方式

安卓手机软件安装?手机app的安装有哪些方式

简介:手机app的安装有三种方式,下面给大家总结一下。 工具:手机 app   一、扫码下载 一般电视屏幕、网页、包装袋上都有二维码,用微信扫一扫即可下载。 二、官网下载 app一定有...