手写实现 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)
相关推荐
YiWait17 小时前
基于 Vue 3 的网络收音机,编译为桌面应用软件
前端·javascript·vue.js
那小子、真烦17 小时前
Hermes Agent Chat 方法分析
java·开发语言
爱喝水的鱼丶17 小时前
SAP-ABAP:变量、常量、结构与内表声明(10篇博客合集) 第六篇:ABAP 7.40+新特性:声明语法的简化写法与兼容注意事项
运维·服务器·开发语言·学习·算法·sap·abap
上海合宙LuatOS17 小时前
Air8000低功耗指南
开发语言·物联网·php·lua
happymaker062617 小时前
SpringBoot使用Thymeleaf模板引擎,前端的基本语法
开发语言·python
01_ice17 小时前
Java抽象类和接口
java·开发语言
大连好光景17 小时前
登录凭证 | Session+Cookie | Redis Token | JWT
前端·javascript
小糯米60117 小时前
C语言 自定义类型:结构体 与 联合体
c语言·开发语言·数据结构
jieyucx18 小时前
Go 语言 JSON 序列化与反序列化
开发语言·golang·json·序列化
罗超驿18 小时前
6.Java多线程详解:Thread类、线程属性与start()方法深度解析
java·开发语言·面试·java-ee