手写 bind 函数

首先来看看 bind 函数使用

// bind 的使用
function fn1(a, b, c) {
    console.log('this', this)
    console.log(a, b, c)
    return 'this is fn1'
}

const fn2 = fn1.bind({x: 100}, 10, 20, 30)
const res = fn2() //this {x: 100}  10 20 30
console.log(res) //this is fn1

然后通过 Function.prototype 模拟 bind1 函数

// 手写 bind
Function.prototype.bind1 = function () {
    //参数拆解为数组
    const args = Array.prototype.slice.call(arguments)

    //获取 this(数组第一项)
    const t = args.shift()

    //fn1.bind(...) 中的fn1
    const self = this

    //返回函数
    return function () {
        return self.apply(t, args)
    }
}

const fn3 = fn1.bind1({x: 100}, 10, 20, 30)
const res2 = fn3() //this {x: 100}  10 20 30
console.log(res2) //this is fn1

小刘

纸上得来终觉浅,绝知此事要躬行

你可能也会喜欢...

发表评论

电子邮件地址不会被公开。 必填项已用*标注