当前位置: 首页 > 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://www.lqws.cn/news/107677.html

相关文章:

  • 【Harmony OS】作业五 数据存储
  • Python趣学篇:Pygame重现《黑客帝国》数字雨
  • Unity UI 性能优化--Sprite 篇
  • Rust 数据类型
  • 初始化已有项目仓库,推送远程(Git)
  • recipes中声明 DEPENDS += “virtual/kernel“ 的效果
  • SMART原则讲解
  • 物联网数据归档之数据存储方案选择分析
  • 大疆无人机的二次开发
  • 【结构型模式】装饰器模式
  • Matlab数值计算
  • [手写系列]从0到1开发并上线Edge浏览器插件
  • Qt 事件传递的完整流程
  • 无人机巡检智能边缘计算终端技术方案‌‌——基于EFISH-SCB-RK3588工控机/SAIL-RK3588核心板的国产化替代方案‌
  • QT实现动画翻转效果
  • 群晖 NAS 如何帮助培训学校解决文件管理难题
  • Windows下将Nginx设置注册安装为服务方法!
  • 工作服/反光衣检测算法AI智能分析网关V4安全作业风险预警方案:筑牢矿山/工地/工厂等多场景安全防线
  • 2024-2025-2-《移动机器人设计与实践》-复习资料-1-7
  • 当 AI 超越人类:从技术突破到文明拐点的 2025-2030 年全景展望
  • 累乘法求数列的通项公式
  • Python(十五)
  • 本人精通各种语言输出hello world
  • 逆向工程开篇(连载中)
  • 使用seaborn/matplotlib定制好看的confusion matrix
  • ssm学习笔记day04
  • Vue3 + Typescript:类型使用记录 / 类型注解 / 积累
  • PV操作的C++代码示例讲解
  • AI与区块链:数据确权与模型共享的未来
  • Day-15【选择与循环】选择结构-if语句