手写实现 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)
相关推荐
牛奶7 分钟前
JS随笔:ES6+特性与模块化实践
前端·javascript
牛奶23 分钟前
JS随笔:基础语法与控制结构
前端·javascript
前端Hardy41 分钟前
HTML&CSS&JS:基于定位的实时天气卡片
javascript·css·html
H0482 小时前
symbol为什么说是为了解决全局变量冲突的问题
javascript
Always_Passion3 小时前
FE视角下的Referrer全面解析
javascript·面试
七牛云行业应用3 小时前
大模型接入踩坑录:被 Unexpected end of JSON 折磨三天,我重写了SSE流解析
javascript·人工智能·代码规范
_AaronWong4 小时前
Vue3+Element Plus 通用表格组件封装与使用实践
前端·javascript·vue.js
代码煮茶4 小时前
JS 异步编程实战 | 从回调地狱到 Promise/Async/Await(附代码 + 面试题)
javascript·面试
全栈老石4 小时前
手写一个无限画布 #3:如何在Canvas 层上建立事件体系
前端·javascript·canvas
csdn飘逸飘逸4 小时前
Autojs基础-device(设备)
javascript