//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后面传递参数的方式是数组形式`复制代码