Javascript中對(duì)象的prototype和constructor

JS中除null和undefined幾乎都存在可讀屬性prototype和constructor矫户,且默認(rèn)情況下prototype屬性中還包含一個(gè)指向超類(lèi)constructor屬性的對(duì)象。

JS中所有的對(duì)象有一個(gè)prototype屬性和constructor银舱,默認(rèn)下瘪匿,prototype指向Obejct{}或functionName{}或者繼承的超類(lèi)。這里要注意的是null和undefined沒(méi)有prototype屬性或者至少是不可讀的寻馏。

這里我想先說(shuō)明一個(gè)問(wèn)題棋弥。JS中的類(lèi)沒(méi)有如PHP、Java或者C++中的private等可見(jiàn)性诚欠,雖然private等本身被作為關(guān)鍵字保留了顽染,但并沒(méi)有實(shí)際的應(yīng)用。另外JS中對(duì)象方法(或類(lèi)方法)的定義有兩種方式:

function A(){}

function B(){}

A.a1=function(){....}

A.prototype.a2=function(){.....}

兩者的區(qū)別表現(xiàn)在繼承上轰绵,如果B繼承A時(shí)只用B.prototype=A粉寞,那么B實(shí)際上只得到了a1方法;如果B繼承時(shí)只用B.prototype=A.prototype左腔,那么B實(shí)際上只得到了a2方法唧垦。且通過(guò)后者的方式instanceof判斷 B instanceof A時(shí)會(huì)返回True。實(shí)際使用時(shí)需要根據(jù)情況的需要使用液样。

因?yàn)橥ㄟ^(guò)prototype屬性业崖,我們可以方面的構(gòu)造或繼承類(lèi),所以在實(shí)際使用中必然會(huì)產(chǎn)生OOP的經(jīng)典問(wèn)題類(lèi)型檢測(cè)(或is_like問(wèn)題)蓄愁。雖然JS中的typeof可以判斷出對(duì)象的類(lèi)型双炕,但對(duì)這個(gè)需求沒(méi)有幫助。instanceof的檢測(cè)撮抓,左邊是要檢測(cè)的對(duì)象妇斤,右邊是要判斷的prototype屬性,它可以判斷出類(lèi)的繼承關(guān)系丹拯。比如

function A(){}

function B(){}

function C(){}

function O(){}

A.prototype = O.prototype;

B.prototype = A.prototype;

C.prototype = B.prototype;

那么instanceof對(duì)于 new A() instanceof O站超、new B() instanceof O、new C() instanceof B都會(huì)給出Ture的返回乖酬。但問(wèn)題在于JS默認(rèn)的所有對(duì)象的prototype都最終指向Object.prototype死相,所以他對(duì)我們的幫助極其有限。這時(shí)constructor可以幫助我們咬像。

constructor屬性在JS中同prototype一樣是普遍存在算撮,默認(rèn)下,constructor指向內(nèi)置類(lèi)型方法或者function Function(){[native code]} 或 function Object(){[native code]}县昂。同prototype一樣肮柜,null和undefined的constructor至少是不可讀的。從默認(rèn)的指向來(lái)看我們就能知道typeof實(shí)際上是對(duì)于自身constructor屬性的驗(yàn)證倒彰。

JS中prototype中還存在一個(gè)不可枚舉的屬性constructor审洞,我們就是靠利用這點(diǎn)來(lái)正確的判斷對(duì)象的實(shí)際構(gòu)造者的。如

function A(){}

function B(){}

function C(){}

A.prototype={constructor:A,somefunc:....}

B.prototype=A.prototype;

C.prototype=B.prototype;

這時(shí)雖然instanceof的運(yùn)算依然是給出Ture待讳,但是當(dāng)我們比較C.prototype.constructor==B時(shí)會(huì)得到False芒澜,而C.prototype.constructor==A卻是Ture仰剿。這樣我們就能夠確認(rèn)C究竟是B還是A。當(dāng)然constructor除了也可以是一個(gè)獨(dú)立的對(duì)象痴晦,但即使執(zhí)行了new操作后也不能使用該對(duì)象中定義的方法南吮。

綜上,我們完全可以利用prototype.constructor來(lái)構(gòu)建基類(lèi)阅酪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末旨袒,一起剝皮案震驚了整個(gè)濱河市汁针,隨后出現(xiàn)的幾起案子术辐,更是在濱河造成了極大的恐慌,老刑警劉巖施无,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辉词,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡猾骡,警方通過(guò)查閱死者的電腦和手機(jī)瑞躺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)兴想,“玉大人幢哨,你說(shuō)我怎么就攤上這事∩┍悖” “怎么了捞镰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)毙替。 經(jīng)常有香客問(wèn)我岸售,道長(zhǎng),這世上最難降的妖魔是什么厂画? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任凸丸,我火速辦了婚禮,結(jié)果婚禮上袱院,老公的妹妹穿的比我還像新娘屎慢。我一直安慰自己,他們只是感情好忽洛,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布抛人。 她就那樣靜靜地躺著,像睡著了一般脐瑰。 火紅的嫁衣襯著肌膚如雪妖枚。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天苍在,我揣著相機(jī)與錄音绝页,去河邊找鬼荠商。 笑死,一個(gè)胖子當(dāng)著我的面吹牛续誉,可吹牛的內(nèi)容都是我干的莱没。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼酷鸦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼饰躲!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起臼隔,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嘹裂,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后摔握,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體寄狼,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年氨淌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泊愧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盛正,死狀恐怖删咱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情豪筝,我是刑警寧澤痰滋,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站壤蚜,受9級(jí)特大地震影響即寡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜袜刷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一聪富、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧著蟹,春花似錦墩蔓、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至涮雷,卻和暖如春阵面,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工样刷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仑扑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓置鼻,卻偏偏與公主長(zhǎng)得像镇饮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子箕母,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容