对于原型的理解,只需记住这三句话:
1.所有的函数数据类型都天生自带一个属性:prototype,这个属性的值是一个对象,浏览器会默认给它开辟一个堆内存
2.在浏览器给prototype开辟的堆内存中有一个天生自带的属性:constructor, 这个属性存储的值是当前函数本身
3.每一个对象都有一个__proto__的属性,这个属性指向当前实例所属类的prototype(如果不能确定它是谁的实例,默认是Object的实例)
原型链
它是一种基于__proto__向上查找的机制。当我们操作实例的某个属性或者方法的时候,首先找自己空间中私有的属性或方法
1.找到了,则结束查找,使用自己私有的即可
2.没有找到,则基于__proto__找所属类的prototype,如果找到就用这个公有的,没有就继续向上找
原型链查找机制: