亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對于 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 關注
  • 526 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號