首先得明白call方法的作用到底是什么
1、call方法接受两个参数,一个是要绑定的对象、一个是调用call的函数的参数
2、call方法会改变其调用函数的this指向,相当于用call的第一个参数对象来执行该函数,也就是要把该函数绑定到该对象上
代码实现
let obj={}//目标对象
function mycall(obj,...args){
let that = this;//拿到执行函数
//将执行函数作为方法添加到目标对象上作为改变this
obj.fn = that;
//执行函数
obj.fn(...args);
//移除fn方法
Reflect.deleteProperty(obj,'fn');
}
//绑定到原型上
Function.prototype.mycall = mycall
fn.mycall(obj,'name')