Appearance
jscall 函数
本节目标:理解“jscall 函数”的核心思路,并能把它用于实际开发或面试表达。
Function.prototype.myCall = function (context) {
// 即使是定义在函数的原型上的,但是可能出现使用 call 等方式调用的情况
// 不是函数将无法使用()调用
if (typeof this !== 'function') {
console.error('type error');
}
// 获取参数
let args = [...arguments].slice(1);
// 判断 context 是否传入,如果未传入则设置为 window
context = context || window;
// 将调用函数设为对象的方法
context.fn = this;
// 调用函数
const result = context.fn(...args);
// 将属性删除
delete context.fn;
return result;
};