【手撕原理】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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章