发布时间:2026/6/18 1:11:53
【前端手撕】call call是改变this指向的方法传入的参数是要指向的对象和函数需要的参数序列。改变this指向还可以用apply和bind区别如下方法传参方式执行时机返回值call参数序列逐个传入立即执行函数执行的结果apply参数数组或类数组立即执行函数执行的结果bind参数序列逐个传入返回新函数稍后执行绑定了this的新函数代码简易版Function.prototype.callSimple function (context, ...args) { context context || window // 确认上下文如果没有上下文就默认window context.fn this // 把当前函数赋值给上下文的fn属性临时属性 const res context.fn(...args) // 调用函数传参 delete context.fn // 删除临时属性 return res }健壮版Function.prototype.call function (context, ...args) { // 如果上下文是null或undefined就默认window否则用Object()转换为对象 // Object()包对象返回原对象包原始类型返回对象包装类型。这是因为简单数据类型不能挂载属性对象才可以 context context ! null context ! undefined ? Object(context) : window let tag Symbol(call) // Symbol()创建一个唯一的符号值避免与其他属性冲突/覆盖 context[tag] this // 把当前函数赋值给上下文的tag属性临时属性 const res context[tag](...args) // 调用函数传参。这里使用方括号是因为tag是一个符号值不能用点号 return res }Tips1. bind传参数可以先传一部分参数返回新函数下次再传剩下的。这种特性叫函数柯里化Currying2. 如果bind返回的新函数被new构造调用了this会失效。因为new的优先级高于bind但也只有new比bind高function Person(name) { this.name name; } const BoundPerson Person.bind({ name: 默认 }); // 试图绑定 this const p new BoundPerson(李四); console.log(p.name); // 输出李四因为new强行创建了一个新对象作为thisbind绑定的this被覆盖了。

相关新闻

2026/6/18 1:11:53

SVN 分支管理最佳实践 SVN 与 Git 命令对照表

第一部分:SVN 分支管理最佳实践一、标准目录结构(约定优于配置)SVN 本身不强制目录结构,但业界公认的标准布局是 trunk / branches / tags 三件套:repository/ ├── trunk/ # 主干:主…

2026/6/18 0:11:53

NXP ZigBee PRO协议栈实战:栈事件处理与高级配置优化指南

1. 项目概述与核心价值如果你正在基于NXP的JN516x系列芯片开发ZigBee产品,比如智能家居的传感器、开关或者工业物联网的采集终端,那么你肯定绕不开对ZigBee PRO协议栈的深度定制和优化。官方文档虽然详尽,但往往侧重于功能罗列,缺…

2026/6/18 2:11:54

GPT、Claude、Gemini、DeepSeek 实际开发怎么选?

目录 1. 先说一个现实:模型能力已经“过剩” 2. GPT:最稳的“默认选项” 优点 适合场景 不太理想的地方 3. Claude:文本能力非常“干净”的模型 优点 适合场景 不太适合 4. Gemini:更偏“系统整合型模型” 优点 适合场…

2026/6/18 2:11:54

S曲线规划停止运动

S曲线停止运动的实现 在运动控制系统中,简单的急停会带来冲击和振动。S曲线停止运动(S-Curve Stop)通过在减速阶段平滑过渡加速度,让电机或运动部件优雅地停下来。本文将拆解核心算法,并给出代码框架。 1. S曲线停止原…

2026/6/18 2:11:53

普通汽车如何蜕变智能座驾:开源驾驶辅助系统完全指南

普通汽车如何蜕变智能座驾:开源驾驶辅助系统完全指南 【免费下载链接】openpilot openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars. 项目地址: https://gitcode.com/GitHub_Trending…

2026/6/18 1:11:53

BaiduPCS-Go命令行工具:彻底解决百度网盘管理难题的高效方案

BaiduPCS-Go命令行工具:彻底解决百度网盘管理难题的高效方案 【免费下载链接】BaiduPCS-Go 项目地址: https://gitcode.com/gh_mirrors/baid/BaiduPCS-Go 你是否厌倦了百度网盘缓慢的网页界面和臃肿的客户端?是否需要在服务器上自动化管理网盘文…

2026/6/18 0:11:52

Linux系统JDK安装配置全攻略:从下载到多版本管理

1. 项目概述:为什么在Linux上搞定JDK是Java开发的基石 如果你刚开始接触Java开发,或者正准备将你的Java应用部署到服务器上,那么“在Linux系统上下载并安装JDK”就是你绕不开的第一步。这听起来像是个简单的任务,不就是下载个软件…

2026/6/18 0:11:53

OpenCore Legacy Patcher终极指南:让老Mac焕发新生的完整方案

OpenCore Legacy Patcher终极指南:让老Mac焕发新生的完整方案 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否曾为心爱的老Mac无法升级到最…

2026/6/18 0:11:53

三、从通量到散度:高斯定理的物理图像与工程应用

1. 通量与散度的物理直觉:从水管到电场线 想象你手里拿着一根浇花用的水管,水流从喷嘴喷出形成一道水柱。如果把一个铁丝圈放在水柱中,单位时间内穿过这个圈的水量就是"通量"最直观的例子。在物理学中,这个概念被抽象为…