手写实现 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)
相关推荐
小龙报8 分钟前
《算法通关指南C++编程篇 --- 初阶函数递归专题》
c语言·开发语言·c++·算法·创业创新·学习方法·visual studio
Moment23 分钟前
专为 LLM 设计的数据格式 TOON,可节省 60% Token
前端·javascript·后端
2501_9412366229 分钟前
分布式日志系统实现
开发语言·c++·算法
星轨初途30 分钟前
《数据结构二叉树之堆 —— 优先队列与排序的高效实现(2)(下)》
c语言·开发语言·数据结构·经验分享·笔记·性能优化
2501_9412355131 分钟前
C++与机器学习框架
开发语言·c++·算法
2501_941111861 小时前
C++模块化设计原则
开发语言·c++·算法
G***66911 小时前
前端性能优化插件,CSS与JavaScript压缩插件实战指南
前端·javascript·css
2501_941237531 小时前
基于C++的游戏引擎开发
开发语言·c++·算法
枫叶丹41 小时前
【Qt开发】Qt窗口(二) -> QToolBar工具栏
开发语言·数据库·c++·qt
熙客1 小时前
Java集合框架概述
java·开发语言