【前端手撕】call

发布时间:2026/9/19 20:37:07

【前端手撕】call call是改变this指向的方法传入的参数是要指向的对象和函数需要的参数序列。改变this指向还可以用apply和bind区别如下方法传参方式执行时机返回值call参数序列逐个传入立即执行函数执行的结果apply参数数组或类数组立即执行函数执行的结果bind参数序列逐个传入返回新函数稍后执行绑定了this的新函数代码简易版Function.prototype.callSimple function (context, ...args) { context context || window // 确认上下文如果没有上下文就默认window context.fn this // 把当前函数赋值给上下文的fn属性临时属性 const res context.fn(...args) // 调用函数传参 delete context.fn // 删除临时属性 return res }健壮版Function.prototype.call function (context, ...args) { // 如果上下文是null或undefined就默认window否则用Object()转换为对象 // Object()包对象返回原对象包原始类型返回对象包装类型。这是因为简单数据类型不能挂载属性对象才可以 context context ! null context ! undefined ? Object(context) : window let tag Symbol(call) // Symbol()创建一个唯一的符号值避免与其他属性冲突/覆盖 context[tag] this // 把当前函数赋值给上下文的tag属性临时属性 const res context[tag](...args) // 调用函数传参。这里使用方括号是因为tag是一个符号值不能用点号 return res }Tips1. bind传参数可以先传一部分参数返回新函数下次再传剩下的。这种特性叫函数柯里化Currying2. 如果bind返回的新函数被new构造调用了this会失效。因为new的优先级高于bind但也只有new比bind高function Person(name) { this.name name; } const BoundPerson Person.bind({ name: 默认 }); // 试图绑定 this const p new BoundPerson(李四); console.log(p.name); // 输出李四因为new强行创建了一个新对象作为thisbind绑定的this被覆盖了。
延伸阅读

更多相关文章

2026/9/18 9:14:13

SVN 分支管理最佳实践 SVN 与 Git 命令对照表

第一部分:SVN 分支管理最佳实践一、标准目录结构(约定优于配置)SVN 本身不强制目录结构,但业界公认的标准布局是 trunk / branches / tags 三件套:repository/ ├── trunk/ # 主干:主…

2026/9/19 8:58:05

NXP ZigBee PRO协议栈实战:栈事件处理与高级配置优化指南

1. 项目概述与核心价值如果你正在基于NXP的JN516x系列芯片开发ZigBee产品,比如智能家居的传感器、开关或者工业物联网的采集终端,那么你肯定绕不开对ZigBee PRO协议栈的深度定制和优化。官方文档虽然详尽,但往往侧重于功能罗列,缺…

2026/9/20 20:16:46

Spring Boot+Dubbo交友平台源码实战:微服务拆解与排坑指南

简介:一套基于Spring Boot与Dubbo微服务架构的探花交友平台完整源码,面向Java后端学习者、毕业设计开发者及希望掌握分布式微服务整合的进阶人群,完整呈现了移动端社交产品从接口设计到服务治理的工程落地思路。项目覆盖手机验证码登录、个人…

2026/9/20 20:16:46

小智AI音频队列满:丢帧、拒包与实时语音流控原理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 20:11:46

GetQzonehistory:QQ空间历史说说全量备份与Excel导出完整指南

GetQzonehistory:QQ空间历史说说全量备份与Excel导出完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 十年前的说说,为什么需要一份档案副本 你翻手机相…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/20 5:01:23

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/20 5:09:33

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码