什么是原型链?

每个对象都可以有一个原型__proto__,这个原型还可以有它自己的原型,以此类推,形成一个原型链。查找特定属性的时候,我们先去这个对象里去找,如果没有的话就去它的原型对象里面去,如果还是没有的话再去向原型对象的原型对象里去寻找…… 这个操作被委托在整个原型链上,这个就是我们说的原型链了。

原型指针

构造函数有两个属性: __proto__ 和 prototype

prototype:

prototype属性,它是函数所独有的,是从一个函数指向一个对象。它的含义是函数的原型对象,也就是这个函数所创建的实例的原型对象;这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法,我们把这个对象叫做原型对象。

__proto__

__proto__ 是原型链查询中实际用到的,它总是指向 prototype(指向构造函数的原型对象),它是对象独有的。

constructor:

每个函数都有一个原型对象,该原型对象有一个constructor属性,指向创建对象的函数本身。

可以使用constructor属性,所有的实例对象都可以访问constructor属性,constructor属性是创建实例对象的函数的引用。我们可以使用constructor属性验证实例的原型类型。

由于constructor属性仅仅是原始构造函数的引用,因此我们可以使用该属性创建新的对象。

总结

  1. __proto__ 是原型链查询中实际用到的,他总是指向 prototype 。
  2. prototype 是函数所独有的,在定义构造函数时自动创建。
  3. 每个对象都有 __proto__ 属性,函数这个特殊对象除了具有 __proto__ 属性,还有特有的原型属性 prototype 。prototype对象默认有两个属性,constructor属性和__proto__属性。prototype属性可以给函数和对象添加可共享(继承)的方法、属性,而__proto__是查找某函数或对象的原型链方式。constructor,这个属性包含了一个指针,指回原构造函数。