手写实现 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)
相关推荐
万邦科技Lafite7 小时前
通过淘宝关键词API接口批量获取商品信息指南
java·前端·javascript
jingxindeyi7 小时前
electron 配置 shadcn-ui
javascript·ui·electron
hard_coding_wang7 小时前
了解一个Excel批量替换的公式用法:REDUCE + LAMBDA 实现循环替换
开发语言·c#·excel
reasonsummer7 小时前
【教学类-134-01】20260414 Python制作童话故事音频
开发语言·python
文慧的科技江湖7 小时前
光伏储能充电系统PRD功能列表 - 慧知开源充电桩平台
开发语言·开源·netty·慧知开源充电桩平台·开源充电桩平台
秋月的私语7 小时前
遥感影像拼接线优化工具:基于Qt+GDAL+OpenCV的从一到二实践
开发语言·qt·opencv
雾岛听蓝7 小时前
Qt操作指南:信号与槽机制
开发语言·数据库·qt
郝学胜-神的一滴7 小时前
Python 多线程编程从入门到精通:原理+实战+最佳实践
开发语言·网络·python·pycharm
feng_you_ying_li7 小时前
C++11,lambda,包装器
开发语言·数据结构·c++
sycmancia7 小时前
Qt——布局管理区(二)
开发语言·前端·qt