首先我们知道call apply bind函数是用来更改函数this指向的三个方法
如何用js手动实现呢?
Function.prototype.mycall=fucntion(obj,...args){
let objs = Object(obj)
objs.fu = this
return objs.fu(...args)
}
当然我们要根据边界条件进行优化,比如undefind null 还有多出来的fu属性
Function.prototype.mycall=fucntion(obj,...args){
let objs = obj?Object(obj):window
let fu = Symbol("fu")
objs[fu] = this
let jg = objs[fu](...args)
delete objs[fu]
return jg
}
把fu设置为symbol属性,唯一属性,不会重名,执行完毕后删除即可
相同道理推出apply
Function.prototype.myapply=fucntion(obj,list=[]){
let objs = obj?Object(obj):window
let fu = Symbol("fu")
objs[fu] = this
let jg = objs[fu](...list)
delete objs[fu]
return jg
}
接下来是bind
Function.prototype.mybind=fucntion(obj,...arg){
return function(...args){
let objs = obj?Object(obj):window
let k = Symbol("k")
objs[k]=this
let sum = objs[k](...arg,...args)
delete objs[k]
return sum
}
}