JS手写call和apply

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

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

推荐阅读更多精彩内容