原型:咱們建立的每一個函數都有一個prototype(原型)屬性,這個屬性是一個指針,指向一個對象, 而這個對象的用途是包含能夠由特定類型的全部實例共享的屬性和方法。javascript
咱們隨意定義一個函數java
function Person(){}
咱們能夠經過函數
Person.prototype
訪問 **function Person()**的原型。prototype
原型**prototype是一個指針,指向一個對象**,所以指針
typeof Person.prototype =="object";//true
在默認狀況下,全部原型對象都會自動得到一個constructor (構造函數)屬性,這個屬性包含一個指向prototype 屬性所在函數的指針。code
代碼求證:對象
Person.prototype.constructor==Person;//true
實例的內部將包含一個指針(內部 屬性),指向構造函數的原型對象。ECMA-262 第5 版中管這個指針叫[[Prototype]]。雖然在腳本中 沒有標準的方式訪問[[Prototype]],但Firefox、Safari 和Chrome 在每一個對象上都支持一個屬性 proto;圖片
每個對象都有一個[[Prototype]]屬性,指向實例在構造函數的原型,咱們能夠經過__proto__訪問此屬性。ip
p=new Person(); p.__proto__
[[Prototype]]鏈接存在於實例與構造函數的原型對象之間,而不是存在於實例與構造函數之間原型
p.__proto__==Person.prototype;//true p.__proto__==Person.constructor;//false
每一個對象都有 [[Prototype]]屬性,原型也是一個對象,因此原型也有 [[Prototype]]屬性,咱們能夠經過以下方式訪問:
Person.prototype.__proto__
MDN對**Object.prototype.proto** 屬性在定義爲:
指向當對象被實例化的時候,用做原型的對象。
意思差很少就是原型的原型。