新闻详情

新闻详情

首页 / 资讯中心 / 详情

【前端手撕】call

发布时间:2026/9/24 6:42:22来源:尧图网络
【前端手撕】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被覆盖了。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

AI Coder与KH Coder:本地部署编程助手与文本分析工具实战指南 2026/9/24 22:18:44

AI Coder与KH Coder:本地部署编程助手与文本分析工具实战指南

“coder”这个词,放在五年前,大家的第一反应肯定是“写代码的人”。现在搜这个关键词,出来的东西已经变味了——一大堆AI编程工具、代码生成模型,还有人直接问“coder咋下载”。我最近把几个主流的开源编码模型都摸了一遍&#xf…

阅读更多 →
芯片为什么有那么多电源地引脚?电源完整性设计深度解析 2026/9/24 22:18:44

芯片为什么有那么多电源地引脚?电源完整性设计深度解析

从当年第一次画PCB开始,我就对芯片手册里那一堆VDD和VSS引脚特别有意见。一块LQFP64封装的MCU,电源和地引脚占了将近四分之一,到了BGA封装的FPGA更夸张,中间一大片区域全是电源和地。当时的第一反应是:芯片设计者是不是…

阅读更多 →
用Deepseek和Lighthouse把QQ变成24小时在线私人智能体 2026/9/24 22:18:44

用Deepseek和Lighthouse把QQ变成24小时在线私人智能体

先交代一下背景:我平时大部分碎片时间都泡在 QQ 里,群里经常有人问各种问题、让我帮忙查资料、甚至临时让我整一个方案。以前我只能切到浏览器打开某个 AI 网页版,复制问题、等回答、再把答案贴回 QQ,来回切换几次就懒得搞了。后来…

阅读更多 →
G6 画布操作实战:drag-canvas、scroll-canvas、zoom-canvas 与视口性能优化全指南 2026/9/24 22:18:36

G6 画布操作实战:drag-canvas、scroll-canvas、zoom-canvas 与视口性能优化全指南

数据可视化前端图表库 【免费下载链接】G6 ♾ A Graph Visualization Framework in JavaScript. 项目地址: https://gitcode.com/gh_mirrors/g6/G6 点击查看 免费下载 导读 本文基于 G6 官方示例分类「Canvas Manipulation(画布操作)」整理…

阅读更多 →
九款主流AI智能摘要与润色工具横向实测:能力、成本与选型指南 2026/9/24 22:18:30

九款主流AI智能摘要与润色工具横向实测:能力、成本与选型指南

最近花了两周时间,把手头能接触到的9款主流高效智能摘要生成与文本润色工具挨个做了轮纵向实测。起因也是被搞烦了:一个是项目周报越写越厚,每周都要从几十页资料里提炼要点,另一个是团队对外输出的文案经常要改润色,来…

阅读更多 →
PHPStan 错误标识符 parameter.variadic 详解:重写方法不得把普通参数改为变长参数 2026/9/24 22:18:30

PHPStan 错误标识符 parameter.variadic 详解:重写方法不得把普通参数改为变长参数

开发工具代码质量静态分析 【免费下载链接】phpstan PHP Static Analysis Tool - discover bugs in your code without running it! 项目地址: https://gitcode.com/gh_mirrors/ph/phpstan 点击查看 免费下载 导读 parameter.variadic 是 PHPStan 在检查方法重写&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞