实现call、bind、apply

Function.prototype.mycall = function (context) {

    let fn = Symbol()

    context = context || window

    context[fn] = this

    let arg = [...arguments].slice(1)

    context[fn](...arg)

}

Function.prototype.myApply = function (context) {

    let fn = Symbol()

    context = context || window

    context[fn] = this

    let arg = [...arguments].slice(1)

    context[fn](arg)

}

Function.prototype.binds = function (context) {

    let self = this

    let arg = [...arguments].slice(1)

    return function () {

        let newArg = [...arguments]

        return self.apply(context, arg.concat(newArg))

    }

}

let Person = {

    name: 'Tom',

    say(age, g) {

        console.log(`我叫${this.name}我今年${age}++++${g}`)

    }

}

Person1 = {

    name: 'Tom1'

}

Person.say.mycall(Person1, 20000, 222, 445)//我叫Tom1我今年18

Person.say.myApply(Person1, [20000, 222, 445])//我叫Tom1我今年18

let fn = Person.say.binds(Person1, 20000, 222, 445)

fn()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容