仅仅学习一下思路,其实并不是很完美,如果更完美的话,可能需要考虑new的时候的this指向问题, 这里仅仅就提供一下思路,大佬勿喷~
call实现
Function.prototype.myCall = function(context, ...args) {
context = context || window
const key = Symbol() // 为了防止key被覆盖
context[key] = this // 利用 . 改变this
const res = context[key](...args)
delete context[key]
return res
}
apply实现
- 其实和call方法是一样的,只不过就是在传参的时候
- call 是 a,b,c...这样的结构 apply 是数组
- 执行的时候 ...args 结构即可 这里多提一句,call的性能比apply要好,因为apply可能会做一些参数校验之类的东西
bind实现
Function.prototype.myBind = function(that, ...arg) {
const _this = this
return function(...params) {
_this.apply(that || window, arg.concat(params))
}
}
是不是很简单 ,其实思路就是这样的,,,,