js手写call方法

29 阅读1分钟

首先得明白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')