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

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

如何理解關(guān)于構(gòu)造函數(shù)的這段代碼?

如何理解關(guān)于構(gòu)造函數(shù)的這段代碼?

犯罪嫌疑人X 2019-05-25 14:56:48
varClass=function(){varklass=function(){};klass.prototype.init=function(){};//定義prototype的別名klass.fn=klass.prototype;//定義類的別名klass.fn.parent=klass;//給類添加屬性klass.extend=function(obj){varextended=obj.extended;for(variinobj){klass[i]=obj[i];}if(extended)extended(klass)};//給實(shí)例添加屬性klass.include=function(obj){varincluded=obj.included;for(variinobj){klass.fn[i]=obj[i];}if(included)included(klass)};returnklass;};varPerson=newClass;Person.include({save:function(id){console.log("idis:"+id);},exists:function(id){/*...*/}});varperson=newPerson;person.save();關(guān)于兩個(gè)new的問題,第一個(gè)是new的是klass的實(shí)例,第二個(gè)new的是什么?打印出來的Person的原型是klass,person也是klass?這是什么情況?還是我完全理解錯(cuò)了?
查看完整描述

2 回答

?
汪汪一只貓

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

根據(jù)MDNnew操作符:
當(dāng)代碼newfoo(...)執(zhí)行時(shí):
一個(gè)新對(duì)象被創(chuàng)建。它繼承自foo.prototype.
構(gòu)造函數(shù)foo被執(zhí)行。執(zhí)行的時(shí)候,相應(yīng)的傳參會(huì)被傳入,同時(shí)上下文(this)會(huì)被指定為這個(gè)新實(shí)例。newfoo等同于newfoo(),只能用在不傳遞任何參數(shù)的情況。
如果構(gòu)造函數(shù)返回了一個(gè)“對(duì)象”,那么這個(gè)對(duì)象會(huì)取代整個(gè)new出來的結(jié)果。如果構(gòu)造函數(shù)沒有返回對(duì)象,那么new出來的結(jié)果為步驟1創(chuàng)建的對(duì)象,ps:一般情況下構(gòu)造函數(shù)不返回任何值,不過用戶如果想覆蓋這個(gè)返回值,可以自己選擇返回一個(gè)普通對(duì)象來覆蓋。當(dāng)然,返回?cái)?shù)組也會(huì)覆蓋,因?yàn)閿?shù)組也是對(duì)象。
根據(jù)第3條,所以,在該例中,構(gòu)造函數(shù)Class通過returnklass;返回一個(gè)函數(shù)這一對(duì)象,所以通過該對(duì)象可以再次構(gòu)造Person類的實(shí)例.在Javascript中,函數(shù)也是對(duì)象.根據(jù)MDNfunction:
在JavaScript中,每個(gè)函數(shù)實(shí)際上都是一個(gè)Function對(duì)象。
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-25
?
守候你守候我

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

首先,在執(zhí)行效果上=>new函數(shù)名===函數(shù)名()實(shí)際他們兩個(gè)并不相等,因?yàn)閚ew函數(shù)名是重新開辟空間,復(fù)制函數(shù)。
varPerson=newClass;等效于=>varPaerson=Class();因?yàn)镃lass這個(gè)函數(shù)的最后,return了klass這個(gè)函數(shù),所以上面那句又等效于=>varPaerson=klass;注意klass是被return回來的函數(shù),是閉包,所以可以看做是在Class函數(shù)內(nèi)部,用"Paerson"這個(gè)字符串替換了"klass",klass所有可以訪問的變量、函數(shù),Paerson同樣可以訪問、執(zhí)行。
接著執(zhí)行Person.include();并且傳入了一個(gè)obj;而Person.include()==klass.include();所以
Person.include({
save:function(id){console.log("idis:"+id);},
exists:function(id){/*...*/}
});
等效于
klass.include({
save:function(id){console.log("idis:"+id);},
exists:function(id){/*...*/}
});
執(zhí)行這個(gè)函數(shù);函數(shù)的執(zhí)行結(jié)果是,把傳入的這個(gè)obj的每一項(xiàng),都綁定到klass.fn這個(gè)對(duì)象中而klass.fn=klass.prototype;顯而易見了,給klass的原型對(duì)象中加入了這些成員。這樣一來,所有被klass實(shí)例化出來的對(duì)象,也都有了這些成員。
下面一句varperson=newPerson;等效于varperson=newKlass();注意這里的Klass函數(shù)是帶括號(hào)的,所以在這里充當(dāng)了構(gòu)造函數(shù),person是被實(shí)例出來的對(duì)象.所以person這個(gè)對(duì)象,就擁有了Klass這個(gè)函數(shù)的原型對(duì)象上的所有成員。所以person.save==function(id){console.log("idis:"+id);};所以person.save()執(zhí)行了后面的函數(shù),而它沒有傳參,所以形參id===undefined;
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-25
  • 2 回答
  • 0 關(guān)注
  • 452 瀏覽
慕課專欄
更多

添加回答

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