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

手写call、apply、bind

一、手写call

const person = {name:'zhangsan'}
function foo(numA,numB){console.log(this)console.log(numA,numB)return numA + numB
}// 手写call
Function.prototype.mycall = function(thisArg,...args){ // 手写callconst key = Symbol('key') // 唯一标识符thisArg[key] = this // 绑定thisconst res = thisArg[key](...args) // 展开参数delete thisArg[key] // 清除return res
}const res = foo.mycall(person,1,2) // thisArg = person
console.log(res)

二、手写apply

Function.prototype.myapply = function(thisArg,args){const key = Symbol('key')thisArg[key] = thisconst res = thisArg[key](...args)delete thisArg[key]return res
}const person = {name:'zhangsna'}
function foo(numA,numB){console.log(this)console.log(numA,numB)return numA+numB
}
const res = foo.myapply(person,[1,2])
console.log(res)

三、手写bind

// 手写bind
Function.prototype.myBind = function(thisArg,...args){// 返回新函数return (...reArgs)=> this.call(thisArg,...args,...reArgs)
}const person = {name:'zhangsan'}
function foo(numA,numB,numC,numD){console.log(this)console.log(numA,numB,numC,numD)return numA + numB + numC + numD
}
const bindFunc = foo.myBind(person,1,2)
const res = bindFunc(3,4)
console.log(res)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 在 EXT 文件系统下,分区开头的Boot Sector与操作系统启动之间的爱恨情仇
  • 华为项目管理认证HCIA-PM认证 |课程大纲
  • 针对Docker容器的可视化管理工具—DockerUI
  • 【DVWA】——Brute Force(暴力破解)
  • 工作五年了,总是要尝试着用回调机制Callback和函数式编程写一些优雅的代码了!!!
  • 使用opencv优化图片(画面变清晰)
  • 不可错过的10款文件加密软件!企业必备的电脑文件加密软件
  • Linux 入门:简单的基础操作
  • 【机器学习】高斯过程的基本概念和应用领域以及在python中的实例
  • 极狐GitLab DevSecOps 功能合集(七大安全功能)
  • 谈一谈幽默的力量
  • Python——贪吃蛇
  • LabVIEW回转马达试验系统
  • redis详细解析和配置选择
  • Machine Learning: A Probabilistic Perspective 机器学习:概率视角 PDF免费分享
  • #Java异常处理
  • Android单元测试 - 几个重要问题
  • C语言笔记(第一章:C语言编程)
  • Java小白进阶笔记(3)-初级面向对象
  • Java应用性能调优
  • Puppeteer:浏览器控制器
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • spring boot 整合mybatis 无法输出sql的问题
  • SpringBoot几种定时任务的实现方式
  • tab.js分享及浏览器兼容性问题汇总
  • Vim Clutch | 面向脚踏板编程……
  • Vue 2.3、2.4 知识点小结
  • 阿里研究院入选中国企业智库系统影响力榜
  • 前端_面试
  • 实战|智能家居行业移动应用性能分析
  • 收藏好这篇,别再只说“数据劫持”了
  • 算法系列——算法入门之递归分而治之思想的实现
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 源码安装memcached和php memcache扩展
  • 【干货分享】dos命令大全
  • 整理一些计算机基础知识!
  • !!java web学习笔记(一到五)
  • #if #elif #endif
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (2)nginx 安装、启停
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (规划)24届春招和25届暑假实习路线准备规划
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (四)opengl函数加载和错误处理
  • (学习日记)2024.01.09
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (转)jdk与jre的区别
  • *1 计算机基础和操作系统基础及几大协议
  • .NET BackgroundWorker
  • .Net Core缓存组件(MemoryCache)源码解析