使用js手动实现bind、call、apply功能
Function.prototype.mycall = function () { const [first, ...rest] = arguments; const ctx = first || window; ctx.func = this; const ret = ctx.func(...rest); delete ctx.func; return ret; };
Function.prototype.myApply = function() { const [first, rest = []] = arguments; const ctx = first || window; ctx.func = this; const ret = ctx.func(...rest); delete ctx.func; return ret; }
Function.prototype.myBind = function() { const [first, ...rest] = arguments; const ctx = first || window; ctx.func = this; return function() { // 这里不能使用 箭头函数 因为箭头函数没有自己的 arguments 这样设计是为了让参数明确化 return ctx.func(...rest, ...arguments); }; // 返回的是一个函数 }
function show(a, b) { return a + b; }
注意:箭头函数没有自己的 arguments,这样设置是为了让函数传递参数 明确化,而不是用使用 arguments来接收
bind函数 可以传递参数,传递的参数 在函数定义的时候 固定下来了,如果在调用函数的时候再次传递参数,那么传递的参数,会追加在 已经固定值的参数
的后面。 但是bind一般都是只传递一个参数改变this指向就够了。
绑定的函数不能再次使用apply和call来改变this
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律