前端JavaScript篇之call() 和 apply() 的区别?

目录

  • call() 和 apply() 的区别?


call() 和 apply() 的区别?

在JavaScript中,call()和apply()都是用来改变函数中this指向的方法,它们的作用是一样的,只是传参的方式不同。

call()方法和apply()方法的第一个参数都是要改变this指向的对象,只是call()方法的后续参数是一个一个传递的,而apply()方法的后续参数是以数组的形式传递的。

具体来说,使用call()方法时,需要将要传递给函数的参数逐个列举出来,例如:

function sayName(age, gender) {console.log(this.name, age, gender)
}var obj = {name: 'John'
}sayName.call(obj, 20, 'male') // 输出John 20 male

请添加图片描述

而使用apply()方法时,需要将要传递给函数的参数放在一个数组中,例如:

function sayName(age, gender) {console.log(this.name, age, gender)
}var obj = {name: 'John'
}sayName.apply(obj, [20, 'male']) // 输出John 20 male

请添加图片描述

需要注意的是,如果传递的参数是一个数组,可以使用apply()方法将数组展开成一个一个的参数,例如:

function sayName(age, gender) {console.log(this.name, age, gender)
}var obj = {name: 'John'
}var arr = [20, 'male']sayName.apply(obj, arr) // 输出John 20 male

请添加图片描述

持续学习总结记录中,回顾一下上面的内容:
call()方法和apply()方法都是用来改变函数中this指向的方法,它们的作用是一样的,只是传参的方式不同。使用call()方法时,需要将要传递给函数的参数逐个列举出来;使用apply()方法时,需要将要传递给函数的参数放在一个数组中。如果传递的参数是一个数组,可以使用apply()方法将数组展开成一个一个的参数。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fyne x86 32位

条件: gcc 32位 任意go环境(x86 x64均可) fyne 编译: set goarch386 fyne package

算法---回溯(正文)

1.什么是回溯? 回溯算法的定义就是和暴力枚举一样枚举所有可能并加撤回,也能和暴力一样去掉一些重复(在之前就被筛出,但还要枚举这个,我们可以跳过这个了---------这个就是回溯剪枝)。但为什么回溯不是暴力…

【linux系统体验】-archlinux折腾日记

archlinux 一、系统安装二、系统配置及美化2.1 中文输入法2.2 安装virtualbox增强工具2.3 终端美化 三、问题总结3.1 一、系统安装 安装步骤人们已经总结了很多很全: Arch Linux图文安装教程 大体步骤: 磁盘分区安装 Linux内核配置系统(基本软件&…

C#使用哈希表对XML文件进行查询

目录 一、使用的方法 1.Hashtable哈希表 2.Hashtable哈希表的Add方法 (1)定义 (2)示例 3.XML文件的使用 二、实例 1.源码 2.生成效果 可以通过使用哈希表可以对XML文件进行查询。 一、使用的方法 1.Hashtable哈希表…

2024-02-08(Flume)

1.Flume 的架构和MQ消息队列有点类似 2.Flume也可以做数据的持久化操作 在Channel部分选择使用File channel组件 3.Flume进行日志文件监控 场景:企业中应用程序部署后会将日志写入到文件中,我们可以使用Flume从各个日志文件将日志收集到日志中心以便…

深入理解java之多线程(一)

前言: 本章节我们将开始学习多线程,多线程是一个很重要的知识点,他在我们实际开发中应用广泛并且基础,可以说掌握多线程编写程序是每一个程序员都应当必备的技能,很多小伙伴也会吐槽多线程比较难,但因为其实…

【Web】基于Mybatis的SQL注入漏洞利用点学习笔记

目录 MyBatis传参占位符区别 不能直接用#{}的情况 in多参数值查询 like %%模糊查询 order by列名参数化 MyBatis传参占位符区别 在 MyBatis 中,#{} 和 ${} 都是用于传参的占位符,但它们之间有很大的区别,主要体现在两个方面&#xff1a…

鸿蒙开发(六)布局概述

迄今为止,我还没有正式提到布局的概念。但其实我之前的demo里面,已经默认使用到了一种布局,那就是线性布局(Row、Column),这也是DevEco创建项目默认页面里面默认采用的布局。那么本篇,带着大家一…

[SAP] ABAP设置非系统关键字代码提示功能

在事务码SE38(ABAP编辑器)屏幕右下角,点击【Options选项】图标 勾选【代码完成】|【建议文本中的非关键字】,并点击【保存】按钮 在下面的程序代码中,当我需要输入在11行的位置输入非关键字lv_str的时候,会有非关键字代码提示的功…

Python速成篇(基础语法)下(新年快乐♥)

引言 一天不学编程手就痒,今天是除夕,学C艹vector的话就没时间出去玩了,所以就写写博客。今天要讲的内容是关于,list(列表),tuple(元组),字典(di…

【MySQL进阶之路】磁盘随机读写和顺序读写对MySQL性能的影响

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复 「资料」 可领取编程高频电子书! 在我后台回复「面试」可领取硬核面试笔记! 文章导读地址…

CSP-202009-1-称检测点查询

CSP-202009-1-称检测点查询 解题思路 本题的时间复杂度貌似没有限制&#xff0c;直接暴力枚举就能知识盲点&#xff1a;sort()函数-升序排序 #include <algorithm>给名为dis&#xff0c;长度为n的数组排序sort(new_dis, new_dis n); #include <iostream> #inc…