因为调用方式基本如下:
fn.myCall(null,arg)
所以在myCall函数中的this指向调用它的fn,在myCall函数中首先将this的值保存下来,然后将要改变的this的的绑定的值的某一个属性设置为这个fn的值然后调用这个fn函数,再之后再删除这个fn函数
Function.prototype.myCall = function (context = globalThis, ...args) {
if (typeof this !== 'function') {
throw new TypeError('not funciton');
}
if (!context) {
return this();
}
// 为content添加一个临时对象fn,辅助调用this(函数)
context.fn = this;
const res = context.fn(...args);
delete context.fn;
return res;
};