手写实现 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)
相关推荐
a诠释淡然4 分钟前
C++模板元编程—现代C++的黑魔法
开发语言·c++
charlie11451419112 分钟前
现代C++工程:constexpr 基础:编译期求值的艺术
开发语言·c++
十九画生13 分钟前
从同步到异步:重新理解 JavaScript 的执行机制
javascript
半个落月16 分钟前
JavaScript 同步异步与 Promise 详解 —— 从 Event Loop 到手写 sleep
javascript
MemoriKu16 分钟前
Flutter 相册 APP 视频模态稳定化实战:从视频抽帧、Embedding 元数据到 Android 真机启动修复
android·开发语言·前端·flutter·架构·音视频·embedding
触底反弹20 分钟前
深入理解 JavaScript 同步与异步:从 Event Loop 到 async/await
javascript
SilentSamsara20 分钟前
特征工程系统方法论:编码、分箱、交互特征与特征选择
开发语言·人工智能·python·机器学习·青少年编程·信息可视化·pandas
morning_judger21 分钟前
Agent开发系列(十)-知识库建设(架构总览)
开发语言·人工智能
ch.ju25 分钟前
Java程序设计(第3版)第四章——继承的特点
java·开发语言
浮生望25 分钟前
JavaScript 异步编程核心:从同步阻塞到 Promise 事件循环
javascript·promise