apply方法的实现原理

apply 的核心原理:

  • 将函数设为对象的属性
  • 执行和删除这个函数
  • 指定 this 到函数并传入给定参数执行函数
  • 如果不传参数,默认指向 window
Function.prototype.myApply= function(content = window){
    content.fn = this; //此时this指向的是调用myApply的函数bar
    let res;
    if(arguments[1]){
        res = content.fn(...arguments[1]);  //函数bar的this已经发生变化,指向content
    }else{
        res = content.fn();  
    }
    delete content.fn;
    return res;
}

var obj = {
    value: 1
};
function foo(name, age) {
    console.log(name)
    console.log(age)
    console.log(this); //此时this已经发生变化了
    console.log(this.value);
}
foo.myApply(obj, [‘Chocolate‘, 18]);

注意:当apply传入的第一个参数为null时,函数体内的this会指向window。

参考:https://blog.csdn.net/weixin_42429718/article/details/106826134

Function.prototype.myApply=function(content = window){ content.fn =this;//此时this指向的是调用myApply的函数barlet res;if(arguments[1]){ res = content.fn(...arguments[1]);//函数bar的this已经发生变化,指向content}else{ res = content.fn();}delete content.fn;return res;}var obj ={ value:1};functionfoo(name, age){ console.log(name) console.log(age) console.log(this);//此时this已经发生变化了 console.log(this.value);} foo.myApply(obj,[‘Chocolate‘,18]);

apply方法的实现原理

上一篇:将长度为n的数组的前端k个元素保持原序移动到数组后端


下一篇:The dependencies of some of the beans in the application context form a cycle