美文网首页
js实现bind call apply

js实现bind call apply

作者: blossom_绽放 | 来源:发表于2020-03-18 10:23 被阅读0次

备忘一下,逻辑很简单,直接看代码

Function.prototype.myCall = function(context) {
    context.fn = this
    let args = [...arguments].slice(1)
    let result = context.fn(...args)
    delete context.fn
    return result
}

Function.prototype.myApply = function(context) {
    context.fn = this
    let args = arguments[1]
    let result
    if (args.length) {
        result = context.fn(...args)
    } else {
        result = context.fn()
    }
    delete context.fn
    return result
}

Function.prototype.myBind = function(context) {
    if (typeof this !== 'function') {
        throw new TypeError('Error')
    }
    let _this = this
    let args = [...arguments].slice(1)
    return function fn() {
        if (this instanceof F) {
            return _this(...args, ...arguments)
        }
        return _this.apply(context, args.concat(...arguments))
    }
}

相关文章

网友评论

      本文标题:js实现bind call apply

      本文链接:https://www.haomeiwen.com/subject/lucqyhtx.html