内部实现:
Function.prototype.myCall = function(param) {
// 这个this就是调用myCall函数的,在这里是fun函数
if(typeof this !== 'function'){
return new TypeError('Not a Function');
}
param = param || window;
param.fn = this;
// arguments是类数组,用Array.from()转一下
let arg = Array.from(arguments).slice(1);
let result = param.fn(...arg);
delete param;
return result;
}
var age = 99;
var obj = {
age: 29,
};
function fun(name) {
console.log(this.age, name); // 29 tom
}
fun.myCall(obj, 'tom');