call方法的实现

Function.prototype.myCall = function(obj,...args) {
    
    
    obj = obj || window;
    let key = Symbol("key");// 生成唯一的key值,防止覆盖原有的key值。
    obj[key] = this;  //这里的this指向调用myCall方法的函数,有点绕。将this指向传进来的第一个参数
    let result = obj[key](...args);
    delete obj[key];// 删除多余的属性
    return result; //返回执行结果
}
function foo(age) {
    
    
    console.log(this.name,age);
}
foo.myCall({
    
    name: "jack"},18);  

猜你喜欢

转载自blog.csdn.net/qq_42931285/article/details/126724010