每建立一個函數,該函數都會自動帶有一個prototype屬性。該屬性是一個指針,指向一個對象,該對象稱之爲原型對象(後期咱們能夠使用這個原型對象幫助咱們在js中實現繼承).
原型對象上默認有一個屬性constructor,該屬性也是一個指針,指向其相關聯的構造函數。
經過調用構造函數產生的實例對象,都擁有一個內部屬性,指向了原型對象。其實例對象可以訪問原型對象上的全部屬性和方法。
總結:三者的關係是,每一個構造函數都有一個原型對象,原型對象上包含着一個指向構造函數的指針,而實例都包含着一個指向原型對象的內部指針。通俗的說,實例能夠經過內部指針訪問到原型對象,原型對象能夠經過constructor找到構造函數。javascript
function People(){ this.type='人' } People.prototype.showType=function(){ alert(this.type); } var person=new People(); //調用原型對象上面的方法 person.showType();//最後結果彈框彈出人
以上代碼定義了一個構造函數People(),People.prototype指向原型對象,其自帶屬性construtor又指回了People,即People.prototype.constructor==People.實例對象person因爲其內部指針指向了原型對象,因此能夠訪問原型對象上的showType方法。java
記住People.prototype只是一個指針,指向的是原型對象,而非構造函數,利用這個指針能夠幫助咱們實現js繼承函數