当前位置: 首页 > 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 上下文的情况
  • 确保不污染传入的对象

相关文章:

  • 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用户的存储空间。
  • widgets wordpress怎么建/珠海seo关键词排名
  • wordpress可以做论坛/seo外链自动群发工具
  • 网络游戏名/seo收费标准多少
  • 网站模版上线需要什么意思/天津seo排名公司
  • 南城做网站/怎么做网络广告推广
  • 如何推广网站架构/长沙网站搭建优化