美文网首页
JS手写call和apply

JS手写call和apply

作者: 瑞哦利 | 来源:发表于2019-10-10 10:08 被阅读0次

    call的实现

                Function.prototype.myCall1 = function(context){
                    context = context || window
                    context.fn = this;
                    var args = [];
                    for(var i = 1,len = arguments.length; i < len; i++){
                        args.push('arguments['+i+']');
                    }
                    var result = eval('context.fn('+args+')')
                    return result;
                }
    
    

    也可以用ES6的方式:

                Function.prototype.myCall2 = function(context){
                    context = context || window
                    context.fn = this;
                    var args = [];
                    for(var i = 1,len = arguments.length; i < len; i++){
                        args.push(arguments[i])
                    }
                    var result = context.fn(...args);
                    delete context.fn
                    return result;
                }
    
    

    apply的实现

                Function.prototype.myApply = function (context,arr){
                    var context = context || window;
                    context.fn = this;
                    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;
                }
    
    

    具体解释请阅读:JavaScript深入之call和apply的模拟实现
    转自:https://www.jianshu.com/p/5192aa9f17cc

    相关文章

      网友评论

          本文标题:JS手写call和apply

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