JavaScript手写bind函数
函数是有Function构建出来的,它本身是内有bind函数的。我们不能影响原有的bind,需要重新在原型上定义一个bind
一、首先在Function.prototype写个custBind函数,它有二个参数,一个用来接收this,一个用rest参数来接收剩余所有的参数
Function.prototype.customBind = function (context, ...bindArgs) { console.log('bindArgs--', bindArgs); }
二、bind,call,apply这些方法它第一个参数是要对this重新绑定的对象,所以要把第一个参数取出来。再返回新的函数,并且这个新的函数也是可以接受参数的(原有的bind调用之后生成的新函数也是可以接收参数的),把二次接受的参数用concat拼接再调用apply函数。
function fn(a, b, c) { console.log('参数', a, b, c); } //bind函数 Function.prototype.customBind = function (context, ...bindArgs) { let self = this; return function (...args) { const newArr = bindArgs.concat(args); return self.apply(context,newArr) } } let fn1 = fn.customBind({ x: 100 }, 10) console.log(fn1(20,30));
同理call,apply也可以按相同思路来写
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!