默認原型鏈
function Person() {}
var p = new Person();
-
從
p
對象的原型對象__proto__
裏可以看出,constructor
等於Person
,可以得出p
是由Person
這個構造函數創建出來的,並且p
繼承自Person.prototype
原型,p.__proto__
與Person.prototype
指向的是同一個原型p.__proto__ === Person.prototype //true
-
原型也是一個對象,既然是對象就有原型,那麼原型的原型是誰呢?由上面的截圖可以看出:
__proto__:Object
是原型對象的原型,將其展開得到以下截圖:p.__proto__.__proto__ === Object.prototype //true
-
Object.prototype
的原型對象是什麼呢?通過調試工具可以得到答案 - 通過上面截圖得知,原型對象是
null
,注意這裏是null
,並不是undefined
,說明它是存在原型定義的,只是定義的值是null
,如果是沒有定義的話,這裏應該會顯示undefined
。null
是原型鏈的頭。
總結
通過調試工具查看js
對象的原型結構,當前對象的__proto__
屬性下的constructor
屬性的類型是當前對象的真實類型,那麼當前對象的原型也就是構造函數類型.prototype
。(p
對象的真實類型是Person
,所以p
的原型就是Person.prototype
)根據此結論往下推到,__proto__
屬性裏的__proto__
屬性裏的constructor
屬性類型也就是__proto__
原型對象的真實類型,__proto__
原型對象的原型對象也是構造函數.prototype
。(__proto__
對象的真實類型是Object
,__proto__
的原型對象是Object.prototype
)Object.prototype
的原型對象是null
,也就到頭了。