网站首页 > 技术文章 正文
01.题目
02.解析
本题目考点为改变this指向,首先来了解一下改变this指向的三种方式: call apply bind
call()方法:
- 无数个参数
- 第一个参数:表示要把this指向的新目标
- 第二个参数:相当于给函数传参,参数以,隔开
- 使用之后会自动执行该函数
const person = {
name: '刘德华'
};
function sayName(age, hobby) {
return `我的名字是:${this.name},年龄:${age},爱好:${hobby}`
};
console.log(sayName.call(person, 12, '唱歌'));
// 我的名字是:刘德华,年龄:12,爱好:唱歌
apply方法:
- 两个参数
- 第一个参数:表示要把this指向的新目标
- 第二个参数:接受一个数组,里面也是传参,只是以数组的方式,相当于arguments
- 使用之后会自动执行该函数
apply() 与call()非常相似,不同之处在于提供参数的方式,apply()使用参数数组,而不是参数列表
const person = {
name: '刘德华'
};
function sayName(age, hobby) {
return `我的名字是:${this.name},年龄:${age},爱好:${hobby}`
};
console.log(sayName.apply(person, [12, '唱歌']));
// 我的名字是:刘德华,年龄:12,爱好:唱歌
bind()方法:
bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。
- 无数个参数
- 第一个参数:表示要把this指向的新目标
- 第二个参数之后:相当于给函数传参,参数以,隔开
- 返回值为一个新的函数,使用的时候需要手动调用下返回的新函数(不会自动执行)
const person = {
name: '刘德华'
};
function sayName(age, hobby) {
return `我的名字是:${this.name},年龄:${age},爱好:${hobby}`
};
console.log(sayName.bind(person, 12, '唱歌'));
// |
// |__ ==> 返回了一个新的函数,使用的时候需要手动调用(不会自动执行)
// 手动调用返回的新函数
const newFunction = sayName.bind(person, 12, '唱歌');
console.log(newFunction());
// 打印结果:==> 我的名字是:刘德华,年龄:12,爱好:唱歌
总结一下
- apply、call、bind三者都是用来改变函数的this对象的指向的;
- apply、call、bind三者第一个参数都是this要指向的对象,也就是想指定的上下文;
- apply、call两者都可以利用后续参数传参;但是传参的方式不一样,apply是数组,call是正常传参形式
- bind是返回对应函数,便于稍后调用;apply、call则是立即调用 。
03.答案:
更多热点
web前端进阶每日一题:下列代码的执行顺序,主要考点:任务队列
猜你喜欢
- 2025-05-28 改善施乐5575系列,打印输出纸张前端、后端有粘碳粉现象
- 2025-05-28 3D打印,演绎制造新传奇
- 2025-05-28 世界最大规模3D打印混凝土步行桥落户上海科普公园
- 2025-05-28 【实战篇】数字化打印——打印部署管理接口开发
- 2025-05-28 前端实用技术分享—用Vue实现打印指定区域
- 2025-05-28 行业案例:高效打印,智能办公
- 2024-09-25 上海首座3D打印书屋亮相!可容纳15人,有地暖有天窗
- 2024-09-25 “JVM” 上的AOP:Java Agent 实战
- 2024-09-25 Python短文,关于print函数的基础用法(一)
- 2024-09-25 电子签章处理文件和打印基于ABP框架的前端项目Vue&Element
你 发表评论:
欢迎- 500℃几个Oracle空值处理函数 oracle处理null值的函数
- 494℃Oracle分析函数之Lag和Lead()使用
- 493℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 481℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 473℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 468℃【数据统计分析】详解Oracle分组函数之CUBE
- 453℃Oracle有哪些常见的函数? oracle中常用的函数
- 448℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 最近发表
-
- Spring Boot跨域难题终结者:3种方案,从此告别CORS噩梦!
- 京东大佬问我,SpringBoot为什么会出现跨域问题?如何解决?
- 在 Spring Boot3 中轻松解决接口跨域访问问题
- 最常见五种跨域解决方案(常见跨域及其解决方案)
- Java Web开发中优雅应对跨域问题(java跨域问题解决办法)
- Spring Boot解决跨域最全指南:从入门到放弃?不,到根治!
- Spring Boot跨域问题终极解决方案:3种方案彻底告别CORS错误
- Spring Cloud 轻松解决跨域,别再乱用了
- Github 太狠了,居然把 "master" 干掉了
- IntelliJ IDEA 调试 Java 8,实在太香了
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)