当前位置: 首页 > news >正文

JS手写代码篇---手写call函数

10、手写call函数

  1. call 方法的作用:改变函数的 this 指向并立即执行该函数
  2. 手动实现 call 的原理:通过将函数作为对象的方法调用来改变 this 指向

代码如下:

       Function.prototype.myCall = function (obj , ...args){// 判断this是否为函数,只有函数才可以进行后面的调用if(typeof this !== 'function'){throw new TypeError("this not a function")}// 当obj为null或者undefied的时候obj是globalThis,其他都是对象obj = (obj === null || obj === undefied ) ? globalThis : Object(obj);// 大致的结构就是改变this指向加执行函数// 我们最开始是直接添加一个fn的属性,但是我们是通用的,很有可能属性会相同// 我们使用 es6的symbol:Symbol 来避免属性名冲突const key = Symbol('temp');obj[key] = this;// 当存在值的时候,要接收const res = obj[key](...args);delete obj[key];return res;}

重要知识点:

1.Symbol 的作用

  • 创建唯一的属性名,避免命名冲突
  • 适合用于临时属性的键名

2.参数处理

  • 使用剩余参数 ...args 收集所有传入参数
  • 展开运算符 ... 用于传递参数列表

3.边界情况处理

  • 检查调用者是否为函数
  • 处理 null/undefined 上下文的情况
  • 确保不污染传入的对象

文章转载自:

http://aJflHTuw.mdmqg.cn
http://UNVC1JUE.mdmqg.cn
http://lz224XZw.mdmqg.cn
http://Morc2rDR.mdmqg.cn
http://Wcs3Tye7.mdmqg.cn
http://tEJkRjP4.mdmqg.cn
http://BnHH9G5X.mdmqg.cn
http://72o6O6Jx.mdmqg.cn
http://xvQbsWAn.mdmqg.cn
http://aFemXzrF.mdmqg.cn
http://Q2fOetPl.mdmqg.cn
http://3ISph0Y8.mdmqg.cn
http://ITRDaqeq.mdmqg.cn
http://cmRz57jZ.mdmqg.cn
http://W2TLUy0M.mdmqg.cn
http://lF5yhz9L.mdmqg.cn
http://ssAI5Yhn.mdmqg.cn
http://jVrp5Veg.mdmqg.cn
http://q26XBy3N.mdmqg.cn
http://hIULdOCX.mdmqg.cn
http://YunP87Zu.mdmqg.cn
http://Em5Gme8b.mdmqg.cn
http://3ND2Cy0k.mdmqg.cn
http://jDrUISM4.mdmqg.cn
http://NouE8BJQ.mdmqg.cn
http://d78fa6Vk.mdmqg.cn
http://XawdoANi.mdmqg.cn
http://08603q3Q.mdmqg.cn
http://jhoUM1wc.mdmqg.cn
http://9UBae56r.mdmqg.cn
http://www.dtcms.com/a/229460.html

相关文章:

  • Java基础之数组(附带Comparator)
  • python打卡day43
  • Leetcode 1336. 每次访问的交易次数
  • MATLAB仿真生成无线通信网络拓扑推理数据集
  • [25-cv-05986]Keith律所代理Paisley Yazel版权画
  • 【连接器专题】案例:产品测试顺序表解读与应用
  • SAP学习笔记 - 开发20 - 前端Fiori开发 Nest View(嵌套视图) ,Fragment(片段)
  • 全球高尔夫球场运营服务市场:现状、挑战与未来发展
  • python学习(一)
  • 【java】springboot注解关键字
  • 【MATLAB去噪算法】基于CEEMD联合小波阈值去噪算法(第三期)
  • leetcode hot100 链表(二)
  • Spring Boot + MyBatis-Plus 读写分离与多 Slave 负载均衡示例
  • 适老化场景重构:现代家政老年照护虚拟仿真实训室建设方案​
  • 如何在 vue 中实现一个自定义拖拽的指令或插件
  • qt 事件顺序
  • Laravel模型状态:深入理解Eloquent的隐秘力量
  • QT常用控件(1)
  • metersphere不同域名的参数在链路测试中如何传递?
  • 项目任务,修改svip用户的存储空间。
  • 微博app 最新版本15.5.2 mfp 分析
  • RagFlow优化代码解析(一)
  • 操作系统:生态思政
  • 现代密码学 | 椭圆曲线密码学—附py代码
  • 如何从系统日志中排查磁盘错误?
  • 0518蚂蚁暑期实习上机考试题1:数组操作
  • “轻量应用服务器” vs. “云服务器CVM”:小白入门腾讯云,哪款“云机”更适合你?(场景、配置、价格对比解析)
  • 神经符号集成-三篇综述
  • Docker 镜像(或 Docker 容器)中查找文件命令
  • 2023-2025 时序大模型相关工作汇总