js 原型链

发布时间 2023-05-05 19:53:04作者: 万物有序

1. 原型

原型包含了构造函数的元信息,元信息包括构造函数本身、通用属性、通用方法、私有属性、原始值等等;由于原型本身也是对象,因此还包含一个特殊的属性 __proto__,它用来访问原型的原型。

2. 原型链

构造函数创造的实例可以访问构造函数的原型,如果这个原型刚好是其他构造函数的实例,那么就可以层层访问。

3. 原型链的终点

虽然原型可以实现层层访问,但是 js 引擎禁止构造闭环,因此通过 __proto__ 最终可以访问到 null。

4. 内置构造函数

js 内置构造函数已经是顶层的函数了,所以它们的 __proto__ 指向同一个匿名函数,暂且称作 F。

Function 本身不需要元信息,Function 的工作方式就是通过 new 运算符、函数名、形参、函数体来创造普通函数,所以它的原型也指向 F。

而 Object 创造的实例是属性和方法的集合,因此有必要让 Object 的实例继承原型的元信息,从而提高工作效率,所以 Object 的原型指向一个对象,暂且称作 M。

js 中,对象作为一个宏观的概念,所谓万物皆对象,所以 Object 的原型也是顶级的对象,所以 M 刚好作为 F 的原型存在。

M 虽然是顶层,但是是有形的,万物从无到有,所以应该有一个起点,这个起点就是 null。