手写实现 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 小时前
【JAVA开发】—— HTTP常见请求方法
java·开发语言·http
楼田莉子8 小时前
Linux系统小项目——“主从设计模式”进程池
linux·服务器·开发语言·c++·vscode·学习
走粥8 小时前
选项式API与组合式API的区别
开发语言·前端·javascript·vue.js·前端框架
从此不归路8 小时前
Qt5 进阶【7】网络请求与 REST API 实战:QNetworkAccessManager 深度应用
开发语言·c++·qt
郑州光合科技余经理8 小时前
源码部署同城O2O系统:中台架构开发指南
java·开发语言·后端·架构·系统架构·uni-app·php
阿波罗尼亚8 小时前
Java框架中的分层架构
java·开发语言·架构
晚霞的不甘8 小时前
解决 Flutter for OpenHarmony 构建失败:HVigor ERROR 00303168 (SDK component missing)
android·javascript·flutter
踏歌~8 小时前
终极指南:在 Windows 上配置 KDB+, JupyterQ 与 Python (embedPy)
开发语言·windows·python
Henry Zhu1238 小时前
Qt Model/View架构详解(三):自定义模型
开发语言·qt
野生技术架构师8 小时前
【面试题】为什么 Java 8 移除了永久代(PermGen)并引入了元空间(Metaspace)?
java·开发语言