手写call和apply

Function.prototype.call2 = function(context) {
    var context = context || window
    context.fn = this

    var args = []
    for (var i = 1, len = arguments.length; i < len; i++) {
        args.push('argument[' + i + ']')
    }

    var result = eval('context.fn(' + args + ')')

    delete context.fn
    
    return result
}
Function.prototype.apply2 = function(context, arr) {
    var context = context || window
    context.fn = this

    var result
    if (!arr) {
        result = context.fn()
    } else {
        var args = []
        for (var i = 0, len = arr.length; i < len; i++) {
            args.push('arr[' + i + ']')
        }
        result = eval('context.fn(' + args + ')')
    }

    delete context.fn

    return result
}
posted @ 2022-07-18 15:49  月半流云  阅读(24)  评论(0编辑  收藏  举报