call函数封装实现

发布时间 2023-09-07 17:36:05作者: Trkly
/**
 * 自定义函数对象的call方法
 * @param {*} Fn 
 * @param {*} obj 
 * @param  {...any} args 
 */
// 函数功能:执行fn, 使this指向obj, 并将后面的n个参数传给fn(功能等同于函数对象的call方法)
function call(Fn, obj, ...args){

    // 如果obj是undefined/null, this指定为全局对象
    if (obj===undefined || obj===null) {
        obj = globalThis; // 全局对象
      }
    // 为obj添加临时的方法,
    obj.temp = Fn;
    // 调用temp方法
    // 通过obj来调用这个方法 ==> 也就会执行temp函数 ==> 此时fn中的this肯定为obj
    let result = obj.temp(...args);

    // 删除临时方法temp
    delete obj.temp

    // 返回Fn执行的结果
    return result

}