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

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

為什么原型鏈的終點(diǎn)是null,而不是Object.prototype

為什么原型鏈的終點(diǎn)是null,而不是Object.prototype

炎炎設(shè)計(jì) 2018-08-06 10:14:39
感覺額外允許Object.prototype.__proto__ 為null沒什么用啊,這么設(shè)計(jì)有什么原因么?
查看完整描述

1 回答

?
SMILET

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

首先要明確一點(diǎn),原型鏈?zhǔn)侵?strong>對(duì)象的原型鏈,所以原型鏈上的所有節(jié)點(diǎn)都是對(duì)象,不能是字符串、數(shù)字、布爾值等原始類型。

另外,規(guī)范要求原型鏈必須是有限長(zhǎng)度的(從任一節(jié)點(diǎn)出發(fā),經(jīng)過有限步驟后必須到達(dá)一個(gè)終點(diǎn)。顯然也不能有環(huán)。)

那么,應(yīng)該用什么對(duì)象作為終點(diǎn)呢?很顯然應(yīng)該用一個(gè)特殊的對(duì)象。

好吧,Object.prototype確實(shí)是個(gè)特殊對(duì)象,我們先假設(shè)用它做終點(diǎn)。那么考慮一下,當(dāng)你取它的原型時(shí)應(yīng)該怎么辦?即

Object.prototype.__proto__;

應(yīng)該返回什么?

取一個(gè)對(duì)象的屬性時(shí),可能發(fā)生三種情況:

  1. 如果屬性存在,那么返回屬性的值。

  2. 如果屬性不存在,那么返回undefined。

  3. 不管屬性存在還是不存在,有可能拋異常。

我們已經(jīng)假設(shè)Object.prototype是終點(diǎn)了,所以看起來不能是情況1。另外,拋出異常也不是好的設(shè)計(jì),所以也不是情況3。那么情況2呢,它不存在原型屬性,返回undefined怎么樣?也不好,因?yàn)榉祷豼ndefined一種解釋是原型不存在,但是也相當(dāng)于原型就是undefined。這樣,在原型鏈上就會(huì)存在一個(gè)非對(duì)象的值。

所以,最佳選擇就是null。一方面,你沒法訪問null的屬性,所以起到了終止原型鏈的作用;另一方面,null在某種意義上也是一種對(duì)象,即空對(duì)象,因?yàn)閚ull一開始就是為表示一個(gè)“空”的對(duì)象存在的。這樣一來,就不會(huì)違反“原型鏈上只能有對(duì)象”的約定。

所以,“原型鏈的終點(diǎn)是null”雖然不是必須不可的,但是卻是最合理的。


查看完整回答
反對(duì) 回復(fù) 2018-09-19
  • 1 回答
  • 0 關(guān)注
  • 1576 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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