//模拟实现
//步骤:1.将函数设为对象得属性 2.执行函数 3.删除函数 4.参数 5.null 6.返回值
Function.prototype.call2 = function(ctx){ //获取调用call得函数,用this可以获取 var ctx = ctx || window; ctx.fn = this; var arg = []; for(let i=1;i<arguments.length;i++){ arg.push(arguments[i]) }; var result = eval('ctx.fn(' + args +')'); delete ctx.fn; return result; } Function.prototype.apply2 = function(ctx,arr){ var ctx = Object(ctx) || window; ctx.fn = this; var result; if(!arr){ ctx.fn() } else{ var arg = []; for(var i=1;i<arr.length;i++){ arg.push('arr['+i+']'); } result = eval('ctx.fn(' + args + ')') } delete context.fn return result; }
eval 计算参数 并执行 参数必须为字符串