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