構造函數 與 原型 與實例化對象 的關係!

 

創建一個構造函數

每個函數裏都有一個原型對象, 原型對象內的 constructor 又是函數本身

function per3(name) {
  this.name = name
  this.fn = function (){
    console.log(this.name)
    console.log('我是構造函數')
  }
}

 

 給構造函數的原型對象添加方法

per3.prototype.pfn = function(){
    console.log(this.name)
    console.log('我是proto的方法')
}

 

實例化對象

let p1 = new per3('per3的name')

此時 打印p1  內部有構造函數中定義過的方法以及參數, 

例: 

p1.name   // per3的name

p1.fn()   // per3的name     // 我是構造函數

p1.pfn()

* 當 調用  p1.pfn() 時實例化對象內找不到 參數或方法時, 便會從構造函數中的 原型對象中尋找   就是構造函數中的 prototype

也就是 實例化對象中的 __proto__   

p1.__proto__ === per3.prototype  結果 // true

p1.pfn() //

 

總結:

當程序加載 per3 函數時,會爲 per3 構造器創建 per3 原型對象,它們是獨立存在的。構造器中有一個 prototype 屬性指向了原型對象, 原型對象中有一個 constructor 屬性指向構造器, 當 per3 類的實例在使用一個不存在的屬性時, 會自動到 per3 構造器的原型對象中去找

 

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