什么是原型?
原型是构造函数的一个属性,这个属性叫prototype
# 那原型有什么作用呢?
原型也就是prototype里面定义一些公用的属性或者方法,在通过new创建一个实例的时候这个实例会继承prototype的属性和方法
举个栗子
// 创建一个函数
function Person() {
}
Person.prototype.name = '我是Person的name'
// 实例一个对象
var p = new Person()
// 这时候实例p会继承Person的prototype内的属性和方法
p.name // 我是Person的name
上图看看效果

# 原型链
当输出p.name的时候,会先在实例p上去找这个name属性,如果没找到的话,就会通过一个proto这个属性里面去找,如果找不到的话,继续向里面的proto去找,直到找到,这个查找的链路叫做 原型链
有个疑问?
这时候的原型链是
1实例 p < Person < Function
2️实例 p < Person < Object < Function
# proto和prototype是什么关系
p.proto指向Person.prototype

# constructor的作用是什么
constructor存在于prototype中,指向的上级function的引用
比如
p.constructor -> ƒ Person() {}
Person.constructor -> ƒ Function() { [native code] }