什么是原型链?
每个对象都可以有一个原型__proto__
,这个原型还可以有它自己的原型,以此类推,形成一个原型链。查找特定属性的时候,我们先去这个对象里去找,如果没有的话就去它的原型对象里面去,如果还是没有的话再去向原型对象的原型对象里去寻找…… 这个操作被委托在整个原型链上,这个就是我们说的原型链了。
原型指针
构造函数有两个属性: __proto__
和 prototype
prototype:
prototype属性,它是函数所独有的,是从一个函数指向一个对象。它的含义是函数的原型对象,也就是这个函数所创建的实例的原型对象;这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法,我们把这个对象叫做原型对象。
__proto__
:
__proto__
是原型链查询中实际用到的,它总是指向 prototype(指向构造函数的原型对象),它是对象独有的。
constructor:
每个函数都有一个原型对象,该原型对象有一个constructor属性,指向创建对象的函数本身。
可以使用constructor属性,所有的实例对象都可以访问constructor属性,constructor属性是创建实例对象的函数的引用。我们可以使用constructor属性验证实例的原型类型。
由于constructor属性仅仅是原始构造函数的引用,因此我们可以使用该属性创建新的对象。
总结
__proto__
是原型链查询中实际用到的,他总是指向 prototype 。- prototype 是函数所独有的,在定义构造函数时自动创建。
- 每个对象都有
__proto__
属性,函数这个特殊对象除了具有__proto__
属性,还有特有的原型属性 prototype 。prototype对象默认有两个属性,constructor属性和__proto__
属性。prototype属性可以给函数和对象添加可共享(继承)的方法、属性,而__proto__
是查找某函数或对象的原型链方式。constructor,这个属性包含了一个指针,指回原构造函数。