但是这篇博文实现bind的逻辑还是有问题的
而且,bind传参应该有两种形式,所以我的实现方式如下:
Function.prototype.myBind = function (context) {
fn = this || window
let args = [...arguments].slice(1)
console.log(args)
if (args.length) {
return function () {
fn.apply(context, args)
}
}
return function () {
fn.apply(context, [...arguments])
}
}
function hello(age, address) {
console.log(this.name, age, address)
}
obj = { name: 'MOT' }
hello.myCall(obj, 29, '湖南长沙')
hello.myApply(obj, [29, '湖南长沙'])
hello.myBind(obj, 29, '湖南长沙')()
hello.myBind(obj)(29, '湖南长沙')
看起来非常完美,但是实际上还是有问题
JS实现new关键字的功能
我们实现的call是无法支持上面的代码的,要怎么解决我现在还不是很清楚,也许我们自己实现的call还有很多漏洞,但是我们还没有发现,一件看起来很简单,其实很难做到完美