apply
Function.prototype.myApply = function (object, args) {
object.fn = this // 这里的this是调用myApply的函数
const result = object.fn(...args) // this的指向是object
delete object.fn
return result
}
call
Function.prototype.myCall = function (object, ...args) {
object.fn = this
const result = object.fn(...args)
delete object.fn
return result
}
注:
apply和call都能改变this的指向,两者区别是apply的参数是数组([1,2])call的参数分别传入(1,2)
bind
Function.prototype.myBind = function (object, ...args) {
// const fn = this
return (...innerArgs) => this.myApply(object, args.concat(innerArgs))
}
注:
bind用于改变this的指向不会执行函数会返回一个新的函数