创建一个构造函数
每个函数里都有一个原型对象, 原型对象内的 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 构造器的原型对象中去找。