为了账号安全,请及时绑定邮箱和手机立即绑定

对于 js 中 bind 的理解

对于 js 中 bind 的理解

函数式编程 2019-03-14 18:12:11
在阅读 《JavaScript 框架设计》 2rd 中,有一段代码不甚明了,烦请各位指教,以下是代码:var bind = function(bind) {    return {        bind: bind.bind(bind),        call: bind.bind(bind.call),        apply: bind.bind(bind.apply)    }}(Function.prototype.bind)var a = [1, [2, 3], 4],    b = [5, 6]var concat = bind.apply([].concat)console.log(concat(b, a))     // [5, 6, 1, 2, 3, 4]该段代码在原书的49页
查看完整描述

2 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

等同于

Function.prototype.bind.bind(Function.prototype.bind.apply)([].concat);

Function.prototype是个function
bind返回一个function并使this指向对应bind的第一个参数
所以最后就是
var concat=[].concat.apply了

过程大致可以理解为

Function.prototype.bind.bind(Function.prototype.bind.apply)([].concat);
消耗一个bind后并修改this 就成为
Function.prototype.bind.apply.bind([].concat)
再消耗一个bind修改this
[].concat.apply


查看完整回答
反对 回复 2019-03-19
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

Function.prototype.bind: 给某个对象,假如为obj绑定一个上下文
bind.bind(bind.apply):相当于得到了apply.bind
bind.apply([].concat):apply需要一个上下文,也就是这里的[].concat,得到[].concat.apply
concat(b, a):相当于是a.concat(b)

查看完整回答
反对 回复 2019-03-19
  • 2 回答
  • 0 关注
  • 505 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信