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。