本文最后更新于235 天前,其中的信息可能已经过时,如有错误请发送邮件到1986413837@qq.com
注意事项
1.在哪写bind函数?
因为是所有函数都具有的方法 要在原型上去写
Function.prototype.myBind = function (ctx, ...args) {
//............
}
2.如何做到返回新函数并调用原函数?
返回一个函数即可 可以把新函数 和 bind函数的参数统一收集起来 供后续使用
谁调用了myBind this就指向谁 fn.myBind 则在myBind函数中this指向fn
所以可以记录这个this (原函数) 再去调用
const fn = this
3.使用new调用时的问题
官方bind函数 使用new调用 返回的是以fn作为构造函数创建的对象
但自己写的会返回 返回函数作为构造函数创建的对象
所以要加上判断 是否通过new调用的(new.target 是否有值)
if (new.target) {
return new fn(...callArgs)
}
else {
return fn.apply(ctx, callArgs)
}
最终代码
