手写实现 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)
相关推荐
Jun6262 分钟前
QT(5)-第三方日志系统
开发语言·数据库·qt
冰暮流星6 分钟前
javascript建立对象之构造函数
开发语言·javascript·ecmascript
keykey6.13 分钟前
PyTorch 入门实战:从张量到训练循环
开发语言·人工智能·深度学习·机器学习
消失的旧时光-194316 分钟前
Kotlin 协程设计思想(七):为什么 Kotlin 要设计 SupervisorJob 和 supervisorScope?
android·开发语言·kotlin
Full Stack Developme19 分钟前
SpringMVC multipart 文件上传
java·开发语言
得一录20 分钟前
ModuleNotFoundError: No module named ‘llama_index.llms
开发语言·人工智能
j7~23 分钟前
【C++】类和对象(下)--详解之再探构造函数,友元,static成员,类型转换等
开发语言·c++·类型转换·友元·匿名对象·内部类·编译器优化
稷下元歌24 分钟前
7天学会plc加机器视觉关于运动控制部份,配套视频在bib
开发语言·c++·git·vscode·python·docker·pip
薇茗25 分钟前
【C++】 类与对象 基础篇
开发语言·c++·基础语法·类与对象
晚笙coding25 分钟前
从零讲透 LangChain 输出格式化:让模型真的“能用”
java·开发语言·langchain