对于 js 中 bind 的理解

在阅读 《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页


函数式编程
浏览 506回答 2
2回答

郎朗坤

等同于Function.prototype.bind.bind(Function.prototype.bind.apply)([].concat);Function.prototype是个functionbind返回一个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

繁星点点滴滴

Function.prototype.bind: 给某个对象,假如为obj绑定一个上下文bind.bind(bind.apply):相当于得到了apply.bindbind.apply([].concat):apply需要一个上下文,也就是这里的[].concat,得到[].concat.applyconcat(b, a):相当于是a.concat(b)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript