在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 對于 js 中 bind 的理解

對于 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頁

回答
編輯回答
吢丕

Function.prototype.bind: 給某個對象,假如為obj綁定一個上下文
bind.bind(bind.apply):相當于得到了apply.bind
bind.apply([].concat):apply需要一個上下文,也就是這里的[].concat,得到[].concat.apply
concat(b, a):相當于是a.concat(b)

2017年12月18日 00:30
編輯回答
孤慣

等同于

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

Function.prototype是個function
bind返回一個function并使this指向對應bind的第一個參數(shù)
所以最后就是
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

2018年7月17日 13:03