加载中...
原型链是 JavaScript 对象继承属性与方法的机制:每个对象有一个隐式原型(__proto__),查找属性时沿链向上追溯直到 null,这套机制早于 ES6 class 语法,是整个语言对象系统的底层支柱。

| 核心属性 | [[Prototype]] / __proto__ / Object.prototype |
| 相关方法 | Object.create / Object.getPrototypeOf / hasOwnProperty |
| 规范 | ECMAScript §10.1 Ordinary Object Internal Methods |
执行 new Foo() 时,引擎做了三件事:创建空对象、将 __proto__ 指向 Foo.prototype、以新对象为 this 运行构造函数。因此实例能访问 Foo.prototype 上的所有方法,而多个实例共享同一份方法,不会重复占用内存——这是原型继承比「每个实例各存一份函数」高效的地方。Object.prototype 是链的终点,它的 __proto__ 为 null。[1]
ES6 引入 class/extends 语法,让原型链的操作看起来像传统面向对象,但 typeof MyClass === 'function' 仍然为真。extends 背后是 Object.setPrototypeOf(Child.prototype, Parent.prototype)。真正改变语言语义的是 ES2022 引入的私有字段(#field),它不走原型链,存储在对象内部的 PrivateFieldValues Map 中,外部完全无法访问。理解原型链对阅读 Node.js 源码、调试框架继承问题至关重要。

| 核心属性 | [[Prototype]] / __proto__ / Object.prototype |
| 相关方法 | Object.create / Object.getPrototypeOf / hasOwnProperty |
| 规范 | ECMAScript §10.1 Ordinary Object Internal Methods |
登录 后参与讨论
暂无讨论,来发表第一条评论吧