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

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

javascript中的寄生構(gòu)造函數(shù)模式其實(shí)就是為了讓工廠(chǎng)模式用起來(lái)像構(gòu)造函數(shù)一樣而刻意為之的嗎?

javascript中的寄生構(gòu)造函數(shù)模式其實(shí)就是為了讓工廠(chǎng)模式用起來(lái)像構(gòu)造函數(shù)一樣而刻意為之的嗎?

慕田峪4524236 2019-04-08 11:16:51
functionSpecialArray(){varvalues=newArray();values.push.apply(values,arguments);values.toPipedString=function(){returnthis.join("|");};returnvalues;}varcolors=newSpecialArray("red","blue","green");alert(colors.toPipedString());//"red|blue|green"關(guān)于javascript中的寄生構(gòu)造函數(shù)模式,我覺(jué)得他和工廠(chǎng)模式其實(shí)就是一樣的,只不過(guò)在寫(xiě)法上用了new這種構(gòu)造函數(shù)的寫(xiě)法,用意是要在不擴(kuò)展原生構(gòu)造函數(shù)的情況下自定義一個(gè)擴(kuò)展型的構(gòu)造函數(shù)。既然是擴(kuò)展原生的構(gòu)造函數(shù),那么用起來(lái)當(dāng)然要像個(gè)構(gòu)造函數(shù),于是就用了new這種構(gòu)造函數(shù)的寫(xiě)法。顯式的return重寫(xiě)了調(diào)用構(gòu)造函數(shù)時(shí)返回的值,所以new不new其實(shí)最后的結(jié)果沒(méi)有影響,那么寫(xiě)只是為了用起來(lái)像構(gòu)造函數(shù)。之所以要有這個(gè)模式是因?yàn)闃?gòu)造函數(shù)模式只能new出一個(gè)Object類(lèi)型,不能夠new出一個(gè)比如Array,類(lèi)似這樣是行不通的:functionSpecialArray(){this=newArray();this.push.apply(this,arguments);this.toPipedString=function(){returnthis.join("|");};}varcolors=newSpecialArray("red","blue","green");alert(colors.toPipedString());//報(bào)錯(cuò):Invalidleft-handsideinassignment大家看看我理解的對(duì)嗎?
查看完整描述

2 回答

?
千萬(wàn)里不及你

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

書(shū)上原話(huà):除了使用new操作符并把使用的的包裝函數(shù)叫做構(gòu)造函數(shù)之外,這個(gè)模式跟工廠(chǎng)模式其實(shí)是一模一樣的。構(gòu)造函數(shù)在不返回值的情況下。默認(rèn)會(huì)返回新對(duì)象實(shí)例。而通過(guò)在構(gòu)造函數(shù)的末尾添加一個(gè)return語(yǔ)句,可以重寫(xiě)調(diào)用構(gòu)造函數(shù)時(shí)返回的值。
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-08
?
森欄

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

很好的問(wèn)題。
我不知道“寄生構(gòu)造函數(shù)”這個(gè)說(shuō)法呢。理論學(xué)習(xí)有些落伍了。
談?wù)勎业膶?shí)踐經(jīng)驗(yàn)吧。
首先,你不能修改this。它是只讀的保留字(keyword),跟for、while是一個(gè)級(jí)別的。
其次,你可以在構(gòu)造函數(shù)最后返回任意一個(gè)對(duì)象。它將代替this!
如果你不考慮繼承,那么單個(gè)類(lèi)你可以這樣創(chuàng)建:
functionSpecialArray(){
o=newArray();
o.push.apply(o,arguments);
o.toPipedString=function(){
returnthis.join("|");
};
returno;
}
varcolors=newSpecialArray("red","blue","green");
alert(colors.toPipedString());
注:如果你寫(xiě)CoffeeScript,那么你會(huì)發(fā)現(xiàn)在正常的構(gòu)造函數(shù)最后,往往必須以@結(jié)尾,否則CoffeeScript會(huì)把最后一行代碼的表達(dá)式值(可能是任何東西)作為構(gòu)造函數(shù)的返回值,然后就出錯(cuò)了……
但如果你要“原裝”的繼承機(jī)制,那么還需要考慮構(gòu)造函數(shù)對(duì)應(yīng)的prototype鏈。這樣問(wèn)題就復(fù)雜起來(lái)。
我已有一套比較好的機(jī)制,但還不夠成熟。
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-08
  • 2 回答
  • 0 關(guān)注
  • 472 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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