一、核心思路
call本质上是给对象添加了方法并调用,最后删除该方法,此外还需要对es6的结构有一定的了解
二、代码实现
/**
* 手写call
* @param {Function} obj 函数
* @param {Array} ...args 数组
* @return 根据具体情况考虑
*/
function Fn(a, b, c, d) {
console.log("this.name:", this.name);
console.log("a,b,c,d:", a, b, c, d);
}
let obj = {
name: "ww",
};
Function.prototype.myCall = function (o, ...args) {
o = o || window;
o.fn = this;
o.fn(...args);
delete o.fn;
};
Fn.myCall(obj, 1, 2, 3, 4);
// args: 1 2 3 4
// this.name: ww
// a,b,c,d: 1 2 3 4