Skip to content

原型

什么是原型?

每个函数都有一个 prototype 属性,这个属性就是原型,它指向一个对象,也叫原型对象。

每个通过构造函数创建的对象,都有一个 __proto__ 属性,指向其构造函数的 prototype

原型对象本质上也是对象,也会有 __proto__ 属性,也就是说原型对象也有原型对象。

当访问对象属性时,如果自身没有,就会沿着 __proto__ 向上查找,直到 null,这条链条就是原型链。

原型的作用

多个对象共享原型上的属性和方法,节省内存,性能优化。

通过原型链实现对象间的继承关系。

构造函数

只能说绝大多数对象都是通过构造函数创建的,但不是所有

  • new Object()new Array()new Person() 等显式构造函数调用
  • 字面量 {}[]/regex/ — 引擎会隐式调用 Object()Array()RegExp() 构造函数
  • class 定义 — 本质也是构造函数

所以更准确的表述是:所有对象都通过内部机制创建,其中绝大多数会关联一个原型对象,而这个原型通常来自某个构造函数

除了 Object.create(null) 这种刻意“切断原型”的对象外,其他所有对象本质上都源于某个构造函数。