Function.prototype.myCall = function(context){
context = context || window; // 没传或者传null,就指向window
context.fn = this;// 获取到调用的方法
var args = [];
for(var i = 1;i < arguments.length; i++){ //注意i从1开始,因为第一个参数是this指向传参
args.push('arguments['+ i +']');//push进去的是字符串
}
var result = eval('context.fn('+args+')');//调用fn方法
delete context.fn;//删除属性fn
return result;
}
注意点:1 如果context 传null 则取window
2 被调用的方法赋值给属性fn,调用完删掉
3 fn参数构造,利用eval的特性构造成字符串