复习 JavaScript 原型链
原型链是 JavaScript 里面很基础的概念,面试中和工作中也经常遇到,但是有的时候用起来还是会犹豫一下。尤其是存在继承关系的时候,有时候搞不清楚对象的原型是谁,这里来结合实验详细的梳理一下。
假设我们有一个 Person 类(构造函数)
1 | class Person { |
我们用 new 操纵符构造一个新的对象 person
1 | let person = new Person() |
那么 person 对象和 Person 的原型链是什么样的呢
person.__proto__指向Person.prototypeperson.constructor指向Person类,因为该对象的构造函数就是Personperson.constructor.prototype也就是Person.prototypePerson.prototype.constructor指向Person自己Person.constructor指向FunctionPerson.__proto__指向Function.prototype至此,Person 类和它的实例对象的原型链基本分析完毕了,接下来我们顺着这条链一直走到底来看一下。
Person.prototype.__proto__指向Object.prototypeObject实例对象的constructor指向Object.prototype.constructorObject.prototype.__proto__是null
下面上一张完整的图,看了这张图,对 js 的原型链就可以一目了然了

总结下就是:
- 实例对象的
__proto__指向类(构造函数)的prototype - 实例对象的
constructor指向类(构造函数)本身 - 类(构造函数)的
__proto__指向父类或者Function的prototype Function的基类是Object- 特别的
Object.__proto__指向一个空函数 - 特别的
Object.property.__proto__是null