js 关于bind一看秒懂

js中有一个技巧叫做函数绑定,即熟知的bind。以下就一个小demo梳理下原理与简单应用。


// bind的大致原理模拟
const slice=Array.prototype.slice

function bind(fn,context){
  const args=slice.call(arguments,2)
  return function () {
    const innerArgs=slice.call(arguments)
    const finalArgs=args.concat(innerArgs)
    return fn.apply(context,finalArgs)
  }
}

const Anna={
  name:'Anna',
  like:function(hobby,reason){
    console.log(`${this.name} like ${hobby} for ${reason}`)
  }
}

Anna.like('swimming','no reason')//Anna like swimming for no reason
const like=Anna.like
like('running','no reason')//undefined like running for no reason
const Annalike=bind(like,Anna)
Annalike('reading','no reason')//Anna like reading for no reason

//ECMAScript5已经为所有函数定义了一个原生的bind方法,方便调用。
const AnnaOriginLike=Anna.like.bind(Anna)
AnnaOriginLike('shopping','no reason')//Anna like reading for no reason

const AnnaLikeArtsFor=Anna.like.bind(Anna,'arts')
AnnaLikeArtsFor('she like beautiful things')//=>Anna like arts for she like beautiful things

const Jim={name:'Jim'}
jimLikeGameFor=Anna.like.bind(Jim,'playing game')
jimLikeGameFor('no reason')//Jim like playing game for no reason



所以它的用途就是很明显:
可以在特定的this环境中以特定的参数调用另外一个函数;
经常用于一些框架的早期版本,如React中自定义的function经常要保持this一致,使用如fn=fn.bind(this)的方法,后面这中保持this不变的功能逐渐被箭头函数替代。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值