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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么原型鏈的終點是null,而不是Object.prototype

為什么原型鏈的終點是null,而不是Object.prototype

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

1 回答

?
SMILET

TA貢獻1796條經(jīng)驗 獲得超4個贊

首先要明確一點,原型鏈是指對象的原型鏈,所以原型鏈上的所有節(jié)點都是對象,不能是字符串、數(shù)字、布爾值等原始類型。

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

那么,應該用什么對象作為終點呢?很顯然應該用一個特殊的對象。

好吧,Object.prototype確實是個特殊對象,我們先假設用它做終點。那么考慮一下,當你取它的原型時應該怎么辦?即

Object.prototype.__proto__;

應該返回什么?

取一個對象的屬性時,可能發(fā)生三種情況:

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

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

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

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

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

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


查看完整回答
反對 回復 2018-09-19
  • 1 回答
  • 0 關注
  • 1586 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號