手写实现 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)
相关推荐
FAREWELL0007521 小时前
Lua环境的配置 和 Lua的一些简单语法逻辑
开发语言·lua
Achieve前端实验室21 小时前
JavaScript 原型/原型链
前端·javascript
Blossom.11821 小时前
大模型量化压缩实战:从FP16到INT4的生产级精度保持之路
开发语言·人工智能·python·深度学习·神经网络·目标检测·机器学习
LXA080921 小时前
vue3开发使用框架推荐
前端·javascript·vue.js
野生工程师1 天前
【Python爬虫基础-3】数据解析
开发语言·爬虫·python
用户90443816324601 天前
React 5 个 “隐形坑”:上线前没注意,debug 到凌晨 3 点
前端·javascript·react.js
AAA阿giao1 天前
Promise:让 JavaScript 异步任务“同步化”的利器
前端·javascript·promise
道19931 天前
python实现电脑手势识别截图
开发语言·python
奇树谦1 天前
Qt 自定义菜单栏 / 工具栏按钮 QToolButton + InstantPopup 详细解析
开发语言·数据库·qt