手写实现 bind 函数

javascript 复制代码
Function.prototype.myBind = function(context) {
    if (typeof this !== 'function') {
        return
    }
    const args = [...arguments].slice(1)
    const fn = this
    return function Fn() {
        // 判断函数作为构造函数的情况,这个时候需要传入当前的函数的this给apply调用,其余情况都传入指定的上下文对象
        const target = this instanceof Fn ? this : context
        return  fn.apply(target, args.concat([...arguments]))
       
    }
}

function setName(name) {
    this.name = name
}

const obj = {
    age: 1
}
const setName1 = setName.bind(obj)
setName1('test')
console.log('正确结果',  obj)
const setName2 = setName.myBind(obj)
setName1('miome')
console.log('正确结果',  obj)
相关推荐
阿森_dev1 分钟前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
by209994 分钟前
C++ 多态:同一个基类接口,调用不同的函数
开发语言·c++·经验分享·多态
笔墨登场说说10 分钟前
flink bin/start-cluster.sh 帮我做成开机启动
开发语言·python
Sarvartha11 分钟前
Lambda 表达式和函数式接口
java·开发语言
小白学大数据25 分钟前
拼多多反爬对抗实战:Scrapy 中间件化采集架构解析
开发语言·scrapy·中间件·架构
溪语流沙1 小时前
【每天一个CSS | Day19】流光文字与一笔写成的手写签名
前端·javascript·css
学逆向的1 小时前
win32注入代码
开发语言·网络安全·api·win32
Sarvartha1 小时前
内部类知识
java·开发语言
CDwenhuohuo1 小时前
electron pc项目打包成桌面端
前端·javascript·electron
FPGA小徐2 小时前
【一生一芯 / PA】异常响应机制:RISC-V 中 ecall → mtvec → mret 的完整代
开发语言·数据库·c#