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也可以按相同思路来写

posted @   雪旭  阅读(581)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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 让容器管理更轻松!
点击右上角即可分享
微信分享提示