//1.實現call方法
let obj = {
value: 88
}
function fn(age,name){
console.log(this.value)
console.log(age)
console.log(name)
}
Function.prototype.mycall = function(obj){
let argus = [];
for(var i=1;i<arguments.length;i++){
argus.push(arguments[i])
}
// console.log(argus)
//將函數做爲對象的一個屬性那麼直接經過對象調用函數裏面的this自動指向該對象
obj = obj || window; //若是傳入的第一個參數爲null時,那麼指向window
obj.func = this;
//將傳過來的參數使用擴展運算符
obj.func(...argus);
delete obj.func;
}
// fn.mycall(obj,23,'lb');
//2.實現apply方法
Function.prototype.myapply = function(obj){
let argus = arguments[1]; //獲取第一個以後的參數
obj.func = this;
obj = obj || window; //若是myapply調用時第一個參數是null,就指向window
obj.func(...argus); //將argus類數組使用擴展運算符轉化爲參數序列形式,而且以逗號隔開
delete obj.func;
}
fn.myapply(obj,[23,'lb']) //apply後面傳遞參數的方式是數組形式`複製代碼