挑战一次学会apply、call和bind

call、apply和bind这三个一直是我们js中非常常用的继承,接下来我将自己从大佬学习的一些经验分享一下。

谈谈三者的异同点

相同点:都是为改变this指向而存在的。
异同点: 使用call()方法时,传递给函数的参数必须逐个列举出来,
使用apply()方法时,传递给函数的是参数数组。
bind()和call()很相似,第一个参数是this的指向,从第二个参数开始是接收的参数列表。
bind() 方法不会立即执行,而是返回一个改变了上下文 this后的函数,用于稍后调用。 call()、apply()则是立即调用。

手写myCall myApply myBind

Function.prototype.myCall=function(context){
    context = context|| window
    context.fn=this
    let arg = [...arguments].slice(1)
    let result = context.fn(...arg)
    delete context.fn
    return result
}
Function.prototype.myApply = function(context){
    context = context||window
    context.fn=this
    let arg = arguments[1]||[]
    let result=context.fn(...arg)
    delete context.fn
    return result
}
Function.prototype.myBind=function(context){
    let _this=this
    let arg=[...arguments].slice(1)
    return function fn(){
        return _this.apply(context,arg.contact(...arguments))
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值