构造函数,原型和实例的关系:
每个构造函数(constructor)都有一个原型对象(prototype),原型对象都包含一个指向构造函数的指针,而实例(instance)都包含一个指向原型对象的内部指针.
上面这一句说出了原型的重要概念!
充分说出了prototype,constructor, __proto__ 之间的关系.
- 每个构造函数都有自己的prototype(原型对象),__proto__属性(指向原型对象)。
prototype,__proto__都是原型对象,有什么区别呢?
- 当new一个实例时,是把构造器的prototype原型对象(即生产产品的模型)作为原型继承给实例,此时的实例跟构造器的__proto__没有任何关系
- __proto__原型对象只是构造器本身要继承的原型
- 实例是没有prototype属性的,只有自身要继承的__proto__原型对象(构造器的prototype)
搜索规则
如果试图引用对象(实例instance)的某个属性,会首先在对象内部寻找该属性,直至找不到,然后才在该对象的原型(instance.prototype)里去找这个属性.
当我们要引用对象的属性时,优先在对象本身查找,如果没找到,就去原型对象里找,去原型对象的原型对象找,这样一级一级往上查找。逐层原型对象的搜索规矩,就叫做原型链!