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的特性構造成字符串