在阅读 《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
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
Function.prototype.bind
: 给某个对象,假如为obj绑定一个上下文bind.bind(bind.apply)
:相当于得到了apply.bindbind.apply([].concat)
:apply需要一个上下文,也就是这里的[].concat,得到[].concat.applyconcat(b, a)
:相当于是a.concat(b)
添加回答
举报
0/150
提交
取消