js原型链与继承

151 阅读1分钟

构造函数,原型和实例的关系:

每个构造函数(constructor)都有一个原型对象(prototype),原型对象都包含一个指向构造函数的指针,而实例(instance)都包含一个指向原型对象的内部指针.

上面这一句说出了原型的重要概念!
充分说出了prototype,constructor, __proto__ 之间的关系.

  • 每个构造函数都有自己的prototype(原型对象),__proto__属性(指向原型对象)。

prototype,__proto__都是原型对象,有什么区别呢?

  1. 当new一个实例时,是把构造器的prototype原型对象(即生产产品的模型)作为原型继承给实例,此时的实例跟构造器的__proto__没有任何关系
  2. __proto__原型对象只是构造器本身要继承的原型
  • 实例是没有prototype属性的,只有自身要继承的__proto__原型对象(构造器的prototype)

搜索规则

如果试图引用对象(实例instance)的某个属性,会首先在对象内部寻找该属性,直至找不到,然后才在该对象的原型(instance.prototype)里去找这个属性.

当我们要引用对象的属性时,优先在对象本身查找,如果没找到,就去原型对象里找,去原型对象的原型对象找,这样一级一级往上查找。逐层原型对象的搜索规矩,就叫做原型链