明白fn1.call.call(fn2);

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

形貌

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

相关文章

fbi是什么意思(fbi是什么组织)

fbi是什么意思(fbi是什么组织)

我们在各种美国大片和美国电视剧中经常看到,FBI、CIA、MIA甚至美国特勤局等等,这些美国各种各样执法机构,今天我们简单就跟大家科普一下,FBI到底是一个什么样的组织?   首先讲,恐怕我们...

赛尔号麒麟解析(赛尔号圣光麒麟)

不值得直接买,可以打。必要精灵是深渊地狱哈迪斯、六界神王、四九圣尊、索比斯、张辽或银月等。一般三天可以获得,最多四天。 体力种族:130(这个在现在来说不错。)速度种族:108(对于麒麟,差了。)攻击...

黑客qq上的,黑客攻克微信红包,黑客qq密码强制查看器下载

本文就让我议论ArrayBuffers和SharedArrayBuffers。 这是由于即便你正在运用具有主动内存办理的JavaScript,ArrayBuffers也可认为你供给一种方法来手动处理一...

楼面地价怎么算?地价和房价之间的关系

老百姓买房子生怕被骗,尽管房价被推得很高,但是心里还是应该有杆秤这房子到底值多少钱?而在房价成本中,楼面价就是其中一部分重要因素。那么什么是楼面价?楼面价和房价之间有什么关系? 楼面价是什么? 楼...

什么是核能发电?核能是怎么产生的

什么是核能发电?核能是怎么产生的

核能的开发应用是人类征服自然过程中的重大突破,具有划时代的意义。核能技术是二十世纪五十年代兴起的新能源技术,其形成和发展是人类对物质微观结构及其运动规律的认识的飞跃。核能技术是人类可控地利用原子核的裂...

重庆美女伴游网-【张念】

“重庆美女伴游网-【张念】” 预定遵义市私人伴游次序步骤女学妹酬劳实施方案:叁仟至捌仟学生兼职招聘資源方法大学本科文章内容版权声明: 这篇由 高端模特经纪人 原創,转截请保存连接,北京市商务伴游网站...