深入理解JS中的原型链

12 阅读1分钟

明确一些概念

  1. JS 万物皆对象,函数也是对象,所以函数可以拥有属性。
  2. 所有对象都是通过 new 函数 创建的。
  3. 所有的对象都是引用类型。
  4. 原型对象就是一个普通的 Object 对象。
  5. 构造函数具有二义性,可以当做函数,也可以看作是实例对象。

基础原型链的三角结构

function Student() {}

let stu = new Student();

几条原则:

  1. 所有的实例对象都有一个属性 __proto__, 他指向函数原型。
  2. 所有的构造函数都有一个属性prototype, 他指向函数原型。
  3. 所有的函数原型都有一个属性constructor, 他指向构造函数。

image.png

完整的原型链

几条原则:

  1. Object 的函数原型与 Function 的构造函数是 JS 引擎启动时就初始化完成的。
  2. Object的函数原型是所有对象的原型链终点。
  3. Function的构造函数负责创建所有函数对象,包括自身和 Object 的构造函数。
  4. 绿色线条为 JS 规定:Function构造函数的__proto__指向其函数原型。

image.png