首页 > 其他分享 >执行x.call.call发生了什么(JS)

执行x.call.call发生了什么(JS)

时间:2022-09-30 23:36:11浏览次数:55  
标签:foo console log JS call fake 执行 true

call方法(Function.prototype.call)是用来改变某个方法被调用时的this指向。

官方描述:使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。

首先,call的常规用法(如下):

const obj = {
  name: 'test-object',
};

function helper() {
  console.log('output');
  console.log(this);
  console.log('name: ', this?.name);
  console.log('args: ', arguments);
}

helper.call(obj, 0, 1, 2);

然后,我们回到主题,看看 x.call.....call 这种用法,该如何理解。

直接看下方代码吧(特别是注释部分)

function foo() {
  console.log('foo -> this: ', this);
}

function fake() {
  console.log('fake -> this: ', this);
}

/**
 * 1. foo.call(fake) 性质过程描述
 * 其等同于:
 * const key = Symbol('foo');
 * fake[key] = foo;
 * fake[key]();
 * delete fake[key];
 */

/**
 * 2. foo.call.call 可以将其理解为:
 * const call = foo.call;
 * 因为 foo.call === Function.prototype.call,
 * 所以 call === Function.prototype.call。
 * 故,
 * call.call(fake, true);
 * 等同于(参考 1):
 * fake.call(true);
 * 所以,最后的输出为:'fake -> this:  [Boolean: true]'
 */

foo.call.call(fake, true);
// output: 'fake -> this:  [Boolean: true]'

 

标签:foo,console,log,JS,call,fake,执行,true
From: https://www.cnblogs.com/fanqshun/p/16746543.html

相关文章

  • 【SQLServer】SQLServer执行计划运算符-第3部分
    1.【SQLServer】SQLServer执行计划概览2.【SQLServer】SQLServer执行计划的类型3.【SQLServer】如何分析图形化的SQL执行计划4.【SQLServer】SQLServer执行计划运算符-......
  • windows设置pm2开机服务 自启动nodejs项目
    PM2是带有内置负载平衡器的Node.js应用程序的生产过程管理器。可以利用它来简化很多Node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等。安装部署1、我们一......
  • 将 react-beautiful-dnd 与 Next.js 和 TypeScript 一起使用
    将react-beautiful-dnd与Next.js和TypeScript一起使用Next.js+TS+react-beautiful-dnd介绍反应美丽的dnd是专门为列表(垂直、水平、列表之间的移动、嵌套......
  • js event
          ......
  • 【Azure 应用服务】本地Node.js部署上云(Azure App Service for Linux)遇到的三个问题
    问题描述当本地Node.js(Linux+Node.js+npm+yarn)部署上云,选择AzureAppServiceforLinux环境。但是在部署时,遇见了以下三个问题:问题一:使用VSCode进行部署,部署速......
  • 什么是JSON和XML
    什么是JSON和XMLJSON:JavaScriptObjectNotation【JavaScript对象表示法】.XML:extensiablemarkuplanguage被称作可扩展标记语言JSON和XML都是数据交换语言,完全独......
  • Python抖音视频去水印,并打包成exe可执行文件
    前言抖音里面的视频保存之后,会发现全都带有水印,所以如何解决视频去除水印就很有必要,所以教程来了,本次教程不仅会教大家如何去除视频里的水印,并且教大家将程序制作成exe可......
  • 2. Node.js简介
    1.前言JavaScript诞生于1995年,几乎是和互联网同时出现;Node.js诞生于2009年,比JavaScript晚了15年左右。在Node.js之前,JavaScript只能运行在浏览器中,作为网页......
  • 报告分享|数字化转型,从战略到执行报告
    报告链接:http://tecdat.cn/?p=28672如何加速国家、城市、行业、企业数字化进程,激发数字经济新动能。这份报告通过洞察数字化的6大改变、4大载体、4个阶段、20+场景、100+......
  • JS 柯里化函数随笔
    模拟实现constslice=Array.prototype.slice;constcurryMaker=function(fn,len){constcurriedArgs=slice.call(arguments,2);returncurry.apply(this......