第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

有沒有童鞋遇到過同樣的問題:先bind再apply的結(jié)果

有沒有童鞋遇到過同樣的問題:先bind再apply的結(jié)果

胡說叔叔 2019-10-25 20:16:23
constobj={s:'s1',getS(){console.log(this.s);}}consto={s:'s2'}letf=obj.getS.bind(obj);f.apply(o);//s1查了網(wǎng)上說bind多次綁定只有第一次是有效的,原理解析什么的沒看懂。上面這段代碼是先bind綁定,然后使用apply改變this的指向,按我這樣理解的話,應(yīng)該是輸出s2。但是正確結(jié)果卻是s1,是不是跟“bind的多次綁定只有第一次是有效的”有關(guān)?有沒有哪位大佬能給我解析一下為什么會(huì)是這個(gè)結(jié)果。
查看完整描述

2 回答

?
浮云間

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊

bind的作用是生成一個(gè)新函數(shù),且永久的改變?cè)摵瘮?shù)的this指向。用apply和call可以模擬bind,簡(jiǎn)單實(shí)現(xiàn)如下
functionbind(fn,scope){
returnfunction_bindFn(){
fn.apply(scope,arguments)
}
}
所以你的函數(shù)f就是下面的函數(shù)
function_bindFn(){
obj.getS.apply(scope,arguments)
}
這里的scope已經(jīng)因?yàn)殚]包的關(guān)系永久的定性為obj了。
當(dāng)我們?cè)賹?duì)f進(jìn)行bind的時(shí)候,就相當(dāng)于生成了一個(gè)新函數(shù)
functionbind1(){
(function_bindFn(){
obj.getS.apply(scope,arguments)
}).apply(scope1,arguments)
}
bind1運(yùn)行的時(shí)候,scope1改變了_bindFn中的this,但是_bindFn中的this是無效的,因?yàn)樽罱K運(yùn)行的是受scope影響的obj.getS。這就是bind嵌套發(fā)生的過程,無論嵌套多少次,最終運(yùn)行的都是obj.getS.apply(scope,arguments)
理解了上面的,那么f.apply(o)為什么輸出s1就簡(jiǎn)單了。
                            
查看完整回答
反對(duì) 回復(fù) 2019-10-25
  • 2 回答
  • 0 關(guān)注
  • 233 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)