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

手写call函数【JavaScript】

考虑一下几点:

        1.如果绑定的this为undefine或者null的时候,this指向运行环境的全局对象window或者glob

        2.如果传递的不是对象而是一些基本类型时,this指向他的包装类

        3.为了改变this指向,因为第一个参数就是this指向,那么通过第一个参数来调用函数就可以改变this的指向,但是为了不和原来的this产生冲突,可以暂时使用Symbol知名符号,后面再删去即可。

        4.把key设置为不可枚举是为了再打印台不显示该Symbol知名符号

Function.prototype.myCall = function (ctx, ...args) {ctx = ctx === undefined || ctx === null ? globalThis : Object(ctx)let key = Symbol()let fn = thisObject.defineProperty(ctx, key, {value: fn,enumerable: false})ctx[key](...args)delete ctx[key]
}

测试案例:

function func(a, b) {console.log("args", a, b)console.log("this", this)
}let result = func.myCall({ fn() { } }, 2, 3)
console.log(result)//args 2 3
//this { fn: [Function: fn] }
//undefined

http://www.dtcms.com/a/360072.html

相关文章:

  • Java多线程基础:进程、线程与线程安全实战
  • 《信息学奥林匹克辞典》中的一个谬误
  • 【Android】Notification 的基本使用
  • C++ 快速复习指南(上半部分)
  • 房屋租赁系统|基于SpringBoot和Vue的房屋租赁系统(源码+数据库+文档)
  • 8.31【Q】CXL-DMSim:
  • 数学分析原理答案——第七章 习题12
  • 设置Ubuntu 22.04 LTS上的rsync同步服务
  • Hysplit大气传输和污染扩散-轨迹聚合标准20%30%用途
  • 国内大型银行数据模型实践案例
  • PerfectSquares.java
  • 解决COB支架偏移载具分析问题根源
  • 编译器领域 名人堂
  • 单表查询-group by rollup优化
  • ibping基本使用 以及 包丢失 超时 排障
  • 【GPT入门】第62课 情感对话场景模型选型、训练与评测方法,整体架构设计
  • Redis核心原理与Java应用实践
  • 基于Seurat的空转单样本数据分析流程学习(一)
  • 性能优化三剑客:`memo`, `useCallback`, `useMemo` 详解
  • 7.1elementplus的表单
  • PyQt5 K线图实现与性能优化详解
  • 我的创作纪念日|一周年,上海-昆明-上海
  • QoS 基本原理与配置
  • 学生请假就餐系统
  • AI 赋能 Java 开发效率:全流程痛点解决与实践案例(二)
  • 使用cursor claude sonnet4的一些感受
  • 【系统分析师】高分论文:论原型法及其在系统开发中的应用
  • Langflow 框架中 Prompt 技术底层实现分析
  • LangChain中Prompt处理机制的技术架构与核心思想分析
  • [信号与系统个人笔记]第三章 连续时间信号与系统的频域分析