使用顏色、形狀可視化Javascript中抽象的原型鏈概念:javascript
圈圈+實心組合形式的含義:java
圖中,prototype屬性就是能夠被繼承的原型,原型能夠是函數,也能夠是普通對象,沒有原型的對象爲數很少,Object.prototype
就是其中之一,如圖中右側所示Object.prototype
原型鏈箭頭指向null
,這裏是全部原型鏈的終點,也意味着原型鏈到此結束,知足:函數
Object.prototype.__proto__ === null // true
複製代碼
咱們熟悉的JSON
和Math
都是普通對象,而不是構造函數,所以它們兩個的原型都是Object.prototype
,知足:ui
JSON.__proto__ === Object.prototype // true
Math.__proto__ === Object.prototype // true
複製代碼
咱們使用對象直接量{}
建立的對象,和使用不經常使用的new Object()
寫法所建立的對象的原型也都是Object.prototype
。spa
使用Object.create()
建立的對象的原型卻不必定是Object.prototype
,這取決於傳入的第一個參數,由於第一個參數是用來指定咱們想要建立的對象的原型,除非第一個參數傳入Object.prototype``,顯然這麼作對
Object.create()```這個方法屬實大材小用了。prototype
許多常見的內置構造函數,好比Date
和RegExp
等等,它們是函數,由於能夠和new
關鍵字一塊兒使用而建立新的對象,因此被稱做構造函數,不過它們也是對象,特殊的能夠執行對象。code
幾乎全部函數,不管是JS內置構造函數,仍是咱們建立的函數,它們的原型都是Function.prototype
,知足:cdn
Date.__proto__ === Function.prototype // true
Array.__proto__ === Function.prototype // true
function myFunc(){}
myFunc.__proto__ === Function.prototype // true
複製代碼
內置構造函數Function
的原型和其它函數同樣,也是Function.prototype
,這就像是本身的原型就是本身身上的一個部分,妙。知足:對象
Function.__proto__ === Function.prototype // true
複製代碼
幾乎全部內置的構造函數的prototype
屬性都是普通對象,但構造函數Function
除外,由於Function.prototype
的特殊之處在於,它是可執行的函數對象,不是普通對象:blog
typeof Function.prototype // "function"
複製代碼
讓我以爲JS在強行自圓其說的一點是,雖然Function.prototype
也是函數,可是它的原型竟是Object.prototype
。
Function.prototype.__proto__ === Object.prototype // true
複製代碼
爲何Function.prototype
做爲一個函數,它的原型不該該是Function.prototype
自身嗎,規範就是這麼規定的,因此說Function
屬於比較個性的一位,它的特殊總結來講分爲如下兩點:
Function
的原型就是Function.prototype
。可是好比說Date.__proto__ === Date.prototype
就不成立;Date
、Array
和Function
等等都是函數,且它們的原型也是函數Function.prototype
,可是Function.prototype
的原型倒是Object.prototype
,而不是它自身。和Function.prototype
同樣特殊的就是Object.prototype
了,由於Object.prototype
雖然是對象,可是它的原型不是它自身,而是null。
並非全部函數的原型都是Function.prototype
,由於Function.prototype
自身也是函數;
並非全部對象的原型都是Object.prototype
,由於Object.prototype
自身也是對象;
我只能告訴你,Function.prototype
是一個特殊的函數;
我只能告訴你,Object.prototype
是一個特殊的對象。
這世界,許多事不能僅靠理性就能講明白,就像男人永遠別期望和女人理性的講道理,懂得太多的人被心眼絆倒。我所知道的太少太少,咱們知道的都太少了,事情背後有太多不知道的事情了,事情的事情的背後又有不知道的事情。
絕要中止探尋真理的步伐,哪怕一切徒勞,人總要有事可作。
null是一切吖。
原創做者:帥華君