創建一個構造函數
每個函數裏都有一個原型對象, 原型對象內的 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 構造器的原型對象中去找。