自己实现一个bind函数

话不多说,直接进入主题。

最简单的写法

    function bind() {
        let that = this
        return function () {
            that.apply(arguments)
        }
    }

用函数柯里化实现bind函数

    function bind() {
        let that = this
        let context = [].shift.call(arguments)
        let args = [].slice.call(arguments)
        return function () {
            that.apply(context,args.concat([].slice.apply(arguments)))
        }
    }

重写函数原型上的bind函数

    if (!Function.prototype.bind){
        Function.prototype.bind = function () {
            let that = this
            let context = [].shift.call(arguments)
            let args = [].slice.call(arguments)
            return function () {
                that.apply(context,args.concat([].slice.apply(arguments)))
            }
        }
    }

 

你可能感兴趣的:(JavaScript填坑之路)