明白fn1.call.call(fn2);

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

形貌

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月28日电(记者陆睿 耿学鹏)韩国疾病管理厅28日公布新冠疫苗接种计划及时间表,表示力争在11月前形成“群体免疫”。   根据当天公布的接种计划,韩...

怎么可以远程监听到妻子打电话的详细内容

怎样将手机上微信聊天记录导出来?迅速帮你导出来,微信聊天记录还能导出来?长见识了!平常朋友们常常使用微信来事儿社交媒体,微信使用久了便会涌起误删除微信数据的难题,就连那类很重视数据信息爱惜的人,都不能...

Js加密算法_Base64

一. 简介 首先有个小Tips,1个字母字符 = 1个字节(byte) = 8位(bit),这是示意单米,Base64是网络上最常见的用于传输 8bit 的编码方式之一,Base64就是一种基于64个...

南京市高档网上预约步骤【孙夏雪】

南京市高档模特网上预约步骤【孙夏雪】 今日给大伙儿共享的內容是“南京市高档模特网上预约步骤【孙夏雪】”,我是孙夏雪,来源于许昌市,2020年二十五岁,做为岗位:中山大学学员,我喜爱我的岗位:中山大学学...

如何在手机上当黑客的教程-黑客技术入侵微信教学

如何在手机上当黑客的教程-黑客技术入侵微信教学

如何在手机上当黑客的教程(tiechemo.com)一直致力于黑客(HACK)技术、黑客QQ群、信息安全、web安全、渗透运维、黑客工具、找黑客、黑客联系方式、24小时在线网络黑客、黑客业务、黑客联盟...