Function.prototype.myApply=function(context,arry){
context = context || window
context.fn =thisif(!arry){var result = context.fn
}else{var result = context.fn(...arry)}return result
delete context.fn
}
3.bind的实现
Function.prototype.myCall=function(context){//先判断调用函数的对象是否为function,不是就跑出错误。if(typeofthis!=='function'){thrownewError("Function.prototype.bind - what is trying to be bound is not callable")}const self =this//获取传入的参数const args =[...arguments].slice(1)//先定义一个空函数进行中转constfNop=function(){}constreNop=function(){//获取函数执行的时候的参数const innerArgs =[...arguments]//判断调用的函数是否为构造函数,如果是构造函数this指向实例,将this绑定到实例//如果函数不是构造函数,将this指向contextreturn self.apply(thisinstanceoffNop?this : context,[...args,..innerArgs])}
fNop.prototype =this.prototype
//修改返回函数的prototype的时候也会修改绑定函数的prototype,实例就可以继承绑定函数的原型中的值
reNop.prototype =newfNop()return reNop
}