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

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

面向?qū)ο笾星短椎暮瘮?shù), 關(guān)鍵字 this 怎樣處理?

面向?qū)ο笾星短椎暮瘮?shù), 關(guān)鍵字 this 怎樣處理?

有只小跳蛙 2019-04-07 09:37:50
一個(gè)不明白的問題.剛開始我學(xué)的是用函數(shù)式的寫法,而且在JS函數(shù)嵌套函數(shù)是很容易的,這么就搞定了.后來我接觸到JS的this,理解每個(gè)函數(shù)的this指向自身所屬對(duì)象,接著就開始接觸OOP的內(nèi)容了.但這里有個(gè)問題,如果我再對(duì)函數(shù)進(jìn)行嵌套,this就可能出錯(cuò)了.比如一個(gè)對(duì)象的方法里,里邊再定義函數(shù)用來作為參數(shù)傳遞..或者僅僅是forEach增加一層作用域:obj=people:['a','b',c]data:a:'aaa'b:'aaa'c:'aaa'say:->this.people.forEach(name)->console.logthis.data[name]obj.say()在函數(shù)式編程里,沒有看到this這樣其葩的功能,而在有C/Java一類語言,不常用嵌套函數(shù)的.就像兩個(gè)東西不能很好地兼容似的...但兩個(gè)都被直接拿過來用在了腳本語言里邊有時(shí)候會(huì)用一個(gè)_this來讓this穿透函數(shù)定義,但我想不是個(gè)好辦法.不知道有沒有好的方案來解決?
查看完整描述

2 回答

?
慕碼人2483693

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

從forEach這個(gè)具體的例子來看,問題倒比較容易解決,畢竟Array.forEach(callback[,thisArg])里可以直接將外層的this傳入,這樣就解決了。從更一般的角度來看,以我愚見,定義一個(gè)varthis_,雖然不太好看,但是在需要多次使用外層的this的時(shí)候,還是很方便的。
如果不需要多次使用this的話,F(xiàn)unction.bind也可以在一定程度上解決這個(gè)問題。想要根本上解決這個(gè)問題,也可以考慮在每個(gè)構(gòu)造函數(shù)里加入類似這樣的代碼://methodNames是一個(gè)包含所有方法名稱的Array
methodNames.forEach(function(name){
this[name]=this[name].bind(this)
},this);缺點(diǎn)是這么做會(huì)大大降低運(yùn)行效率,而且也不好看??偟膩碚f這是Javascript的設(shè)計(jì)上的問題,只能繞過去了。編輯:(感謝@zx1986的提醒)如果是用CoffeeScript的話,那么可以使用它提供的=>來定義一個(gè)保留外層this的函數(shù):classTree
constructor:(@value,@children)->
show:()->
@children.forEach(child)=>
#Notethefatarrow(=>)usedhere
console.log"",@value,child
t=newTree"root",[1,2,3]
t.show()這個(gè)功能看起來還是不錯(cuò)的..
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-07
  • 2 回答
  • 0 關(guān)注
  • 319 瀏覽
慕課專欄
更多

添加回答

舉報(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)