bind
- 首先bind可以通过apply或call来实现,其实就是一个简单的闭包保存函数本身的一些状态,然后返回一个修改之后的函数
- 要支持预置参数
- 要判断传入的是否是函数,进行报错
Function.prototype.mybind = function(obj,...pre){
//let fn = this
if(!(fn instanceof Function)){
throw Error('...')
}
return (...end)=>{
// fn.apply(obj,pre)
this.apply(obj,[...pre,...end])
}
}
call
- 利用function的this指向调用者的特性
- 给obj添加被调用的函数
- obj.func()调用函数
- delete obj.func
Function.prototype.mycall = function(obj,...arg){
obj.temp = this;
obj.temp(...arg);
delete obj.temp
}