JavaScript 中,.call()的使用详解

在 JavaScript 中,.call() 是一个方法,用于显式地设置函数执行时的上下文(this 值),并立即调用该函数。它是函数对象的内置方法之一,与 .apply() 和 .bind() 类似。

.call()的基本语法

functionName.call(thisArg, arg1, arg2, ...);
  • functionName:调用 .call() 的函数。
  • thisArg:在调用 functionName 时指定的 this 值。如果为 null 或 undefined,this 将指向全局对象(在浏览器中是 window,在严格模式下是 undefined)。
  • arg1, arg2, …:调用 functionName 时传递的参数

.call() 的基本功能

  • .call()方法会立即执行函数
  • thisArg会被赋值为函数执行的this
  • 后续的参数会依次传递给函数

.call()的作用

1. 显式绑定 this

.call() 可以显式指定函数调用时的 this 指向

function greet(greeting) {console.log(`${greeting}, my name is ${this.name}`);
}
const person = { name: 'Alice' };
greet.call(person, 'Hello'); // 输出:Hello, my name is Alice

这里 greet 函数的 this 被设置为 person,所以它可以访问 person.name。

2. 继承和复用方法

可以使用 .call() 将一个对象的方法借用给另一个对象。

const obj1 = {name: 'Object1',sayName() {console.log(this.name);}
};
const obj2 = { name: 'Object2' };
obj1.sayName.call(obj2); // 输出:Object2

3. 调用构造函数或父类方法

面向对象编程中,使用 .call() 调用父类的构造函数或方法。

function Animal(name) {this.name = name;
}
function Dog(name, breed) {Animal.call(this, name); // 调用父类构造函数this.breed = breed;
}
const myDog = new Dog('Rex', 'Golden Retriever');
console.log(myDog.name); // 输出:Rex

4. 函数式编程与参数展开

.call() 可以用于以明确方式传递参数而不创建新的数组。

function sum(a, b, c) {return a + b + c;
}
console.log(sum.call(null, 1, 2, 3)); // 输出:6

总结

.call() 的关键点是显式设置函数的 this 值并立即执行,适用于以下场景:

  • 动态绑定 this 上下文。
  • 复用方法或函数。
  • 在继承或组合场景中调用父类方法。
  • 明确传递参数,而非用数组的形式(与 .apply() 的区别)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/20064.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

类与对象(c++)——取地址运算符重载,初始化列表,类型转换

1.取地址运算符重载 1.1 const成员函数 a)将const修饰的成员函数称之为const成员函数,const修饰成员函数放到成员函数参数列表的后 ⾯。 b)const实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进⾏修改。 const 修饰Date类的…

形态学图像处理(Morphological Image Processing)

形态学图像处理(Morphological Image Processing) 前言 ‍ 本博客为个人总结数字图像处理一课所写,并给出适当的扩展和相应的demo。 写博客跟做 checkpoint​ 很像,毕竟个人还不能达到那种信手拈来的境界,忘了就是从零开始训练&#xff0…

如何在K8s集群中管理与使用GPU

背景 随着人工智能的兴起,GPU作为重要的智算算力类型愈发受到重视,而Kubernetes(k8s)作为业界主流的集群管理系统,如何方便管理、使用GPU也是其需要解决的一大问题,故此收集整理了K8s管理与使用GPU的相关资…

kubepi管理k8s集群,演示如何连接阿里云k8s容器

一、背景 对k8s容器运维的过程中,如果是自建k8s的话,一般会安装dashboard,方便管理;如果是阿里云k8s容器,它是有提供web ui,但是它有个不便之处–需要定期登录,且缺少命令控制台。 当你需要使…

Conda 安装纯净版ComfyUI

网上有很多整合包, 我个人喜欢纯净版, 自已搭建 1 拉代码 git clone https://github.com/comfyanonymous/ComfyUI 如果没有装过git,下载安装: https://git-scm.com/ https://git-lfs.com/ 2 创建环境 cd ComfyUI conda create -n ComfyUI python3.11…

LeetCode:700. 二叉搜索树中的搜索

目录 题目描述: 代码: 题目描述: 给定二叉搜索树(BST)的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。 示例 1: 输入:root [4,2,7,1,3…

摄影:相机控色

摄影:相机控色 白平衡(White Balance)白平衡的作用: 白平衡的使用环境色温下相机色温下总结 白平衡偏移与包围白平衡包围 影调 白平衡(White Balance) 人眼看到的白色:会自动适应环境光线。 相…

【大选】2024年美国总统选举数据分析可视化

前言 • 👓 可视化主要使用 Plotly • 🔎 数据处理主要使用 pandas • 👉 本文是我自己在和鲸社区的原创 1.项目背景描述 2024年美国大选是该国政治生活中的重要事件,吸引了全球的关注。本报告通过对选举数据的分析&#xff0c…

Linux进阶:常用操作

systemctl: 控制系统服务的启动、关闭 系统内置服务均可被systemctl控制第三方软件,如果自动注册了可以被systemctl控制第三方软件,如果没有自动注册,可以手动注册 语法:systemctl start | stop | restart | disable…

JVM类加载过程-Loading

一、Class对象的生命周期 .class文件是如何加载到内存中:.class文件是ClassLoader通过IO将文件读到内存,再通过双亲委派的模式进行Loading,再Linking、以及Initializing,代码调用等一系列操作后,进行GC,组成完整的生命周期; 二、双亲委派模式(Loading的过程): 1、类…

002创建ASP.NET Core项目-数据库优先

创建数据库和表 创建数据库和表 添加关系 Product表引用Category 创建ASP.NET Core Web项目 根据数据库创建Models 在【程序包管理器控制台输入命令】 Scaffold-DbContext Data Source.;Initial Catalogshopdb;Usersa;Password123456;TrustServerCertificatetrue’Microso…

探究IOC容器刷新环节初始化前的预处理

目录 一、IOC容器的刷新环节快速回顾 二、初始化前的预处理prepareRefresh源码分析 三、初始化属性源 (一)GenericWebApplicationContext初始化属性源 (二)StaticWebApplicationContext初始化属性源 四、初始化早期事件集合…

25.UE5时间膨胀,慢动作,切换地图,刷BOSS

2-27 时间膨胀、慢动作、切换地图、刷BOSS_哔哩哔哩_bilibili 目录 1.刷新BOSS逻辑 2.时间膨胀实现慢动作 3.胜利画面,下一关 3.1胜利画面UI 3.2第一关、第二关游戏模式 3.3下一关按钮事件的绑定 1.刷新BOSS逻辑 实现当场上的怪物都死亡后,进行刷…

自己编写的前后端分离程序,解决跨域问题

跨域问题在前端解决很麻烦,既然前后端都是自己编写的,就直接在后端解决了。 1. 后端中 在controller文件中加上 CrossOrigin // 解决跨域问题,不加的话虽然数据能正常传输,但是前端页面会没有正常响应 2. 前端中 可以正常访问…

小米顾此失彼:汽车毛利大增,手机却跌至低谷

科技新知 原创作者丨依蔓 编辑丨蕨影 三年磨一剑的小米汽车毛利率大增,手机业务毛利率却出现下滑景象。 11月18日,小米集团发布 2024年第三季度财报,公司实现营收925.1亿元,同比增长30.5%,预估902.8亿元;…

E45.【C语言】练习:输入10个整数查找找并打印不相同的数字及个数

1.题目 输入10个整数查找找并打印不相同的数字及个数 输入示例 数组元素个数:10 20 50 30 10 60 90 70 30 10 20 输出示例 20 50 30 10 60 90 70 一共7个 2.初始代码 和E27.【C语言】练习:在一个整型数组中,只有一个数字出现一次,其他数…

播放器开发之ffmpeg 硬件解码方案

硬件编解码的概念 硬件编解码是⾮CPU通过烧写运⾏视频加速功能对⾼清视频流进⾏编解码,其中⾮CPU可包括GPU、FPGA或者 ASIC等独⽴硬件模块,把CPU⾼使⽤率的视频解码⼯作从CPU⾥分离出来,降低CPU的使⽤负荷,使得平台能 ⾼效且流畅…

DDD领域应用理论实践分析回顾

目录 一、DDD的重要性 (一)拥抱互联网黑话(抓痛点、谈愿景、搞方法论) (二)DDD真的重要吗? 二、领域驱动设计DDD在B端营销系统的实践 (一)设计落地步骤 &#xff0…

读懂top后显示内容

第一行:系统信息 top - 06:33:12 up 42 min, 1 user, load average: 0.04, 0.02, 0.00 06:33:12:当前时间。up 42 min:系统已经启动了 42 分钟。1 user:当前有 1 个用户登录。load average: 0.04, 0.02, 0.00:这三个…

2024年第十四届APMCM亚太杯数学建模A题B题C题思路+代码解析汇总

2024年第十四届亚太地区大学生数学建模竞赛 开赛后第一时间更新解题思路代码参考文章! 点击链接加入群聊【2024亚太杯数学建模竞赛助攻】:http://qm.qq.com/cgi-bin/qm/qr?_wv1027&ksIq03p_73AYtWuH-bNy6VGD2652Um6y2&authKeyZsYwQzbxX0BKPyH…