原型鏈(一)

默認原型鏈

function Person() {}
var p = new Person();

clipboard.png

  • p對象的原型對象__proto__裏可以看出,constructor等於Person,可以得出p是由Person這個構造函數創建出來的,並且p繼承自Person.prototype原型,p.__proto__Person.prototype指向的是同一個原型

    p.__proto__ === Person.prototype //true
  • 原型也是一個對象,既然是對象就有原型,那麼原型的原型是誰呢?由上面的截圖可以看出:__proto__:Object是原型對象的原型,將其展開得到以下截圖:

    clipboard.png

    p.__proto__.__proto__ === Object.prototype //true
  • Object.prototype的原型對象是什麼呢?通過調試工具可以得到答案

    clipboard.png

  • 通過上面截圖得知,原型對象是null,注意這裏是null,並不是undefined,說明它是存在原型定義的,只是定義的值是null,如果是沒有定義的話,這裏應該會顯示undefinednull是原型鏈的頭。

總結

通過調試工具查看js對象的原型結構,當前對象的__proto__屬性下的constructor屬性的類型是當前對象的真實類型,那麼當前對象的原型也就是構造函數類型.prototype。(p對象的真實類型是Person,所以p的原型就是Person.prototype)根據此結論往下推到,__proto__屬性裏的__proto__屬性裏的constructor屬性類型也就是__proto__原型對象的真實類型,__proto__原型對象的原型對象也是構造函數.prototype。(__proto__對象的真實類型是Object__proto__的原型對象是Object.prototypeObject.prototype的原型對象是null,也就到頭了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章