手写实现 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)
相关推荐
大家的林语冰21 分钟前
npm 不忍了,正式上线“阶段式发布“的新功能,进一步对抗频繁的供应链攻击!
前端·javascript·node.js
master33626 分钟前
python 安装pip
开发语言·python·pip
思麟呀27 分钟前
C++14概述与三大核心语法改进
开发语言·c++
shushangyun_31 分钟前
批发商城系统源码多少钱?2026最新报价一览
java·开发语言·人工智能·spring·spring cloud
影视飓风TIM33 分钟前
从C++引用到类封装:底层视角拆解核心语法与面试考点
java·开发语言
江畔柳前堤39 分钟前
github实战指南03-Pull Request 全流程实战
开发语言·人工智能·python·深度学习·github·word
森G40 分钟前
67、Qt 多媒体框架概述---------多媒体
开发语言·qt
葛兰岱尔1 小时前
从 SolidWorks 到 Three.js,从 Inventor 到 Unity——制造业CAD模型“几何-语义一体化“转换,不再是天方夜谭!
开发语言·javascript·unity
小小晓.1 小时前
零基础C++小白突破
开发语言·c++
zzqssliu1 小时前
基于Laravel + Express.js的代购系统多语言多货币架构设计
javascript·express·laravel