JavaScript类继承的底层本质是原型链操作,ES6 class是语法糖,通过__proto__链实现方法和属性继承,extends设置静态与实例继承关系,super调用父构造函数并指向父prototype。

JavaScript 中类继承的底层本质,就是操作原型链,让子类实例能沿着 __proto__ 链访问到父类的方法和属性。ES6 的 class 语法只是语法糖,背后仍基于函数和原型机制运行。
构造函数与 prototype 的绑定关系
每个函数(包括 class 声明生成的构造函数)都有一个 prototype 属性,指向一个对象。这个对象会成为所有该函数实例的隐式原型(即实例的 __proto__ 指向它)。
例如:
class Parent {} → Parent.prototype 是实例的 __proto__;
class Child extends Parent {} → Child.prototype.__proto__ === Parent.prototype
extends 关键字实际做了三件事
- 设置子类构造函数的
__proto__指向父类构造函数(实现静态方法继承,如Parent.method()可被Child.method()调用) - 设置
Child.prototype.__proto__指向Parent.prototype(实现原型上方法的继承) - 确保子类构造函数中必须调用
super()—— 它本质是执行Parent.call(this, ...args),初始化父类实例属性
super() 不只是调用父构造函数
super 在构造函数中是一个特殊引用,指向父类的 prototype 对象(不是父构造函数本身)。在方法中使用 super.xxx 时,JS 引擎会从当前实例的 __proto__ 链向上查找,找到第一个匹配的属性或方法。
注意:super 只能在 class 内部使用,且必须在 this 被初始化前调用 super()(否则报错),因为 this 依赖于父类构造函数执行后的内部状态。
立即学习“Java免费学习笔记(深入)”;
手动模拟 extends 的原型链设置
可以不用 class,用函数+原型手动复现:
function Child() { Parent.call(this); }
Object.setPrototypeOf(Child, Parent); // 静态继承
Object.setPrototypeOf(Child.prototype, Parent.prototype); // 实例方法继承
这等价于 class Child extends Parent 的核心行为。现代引擎(如 V8)内部正是这样设置原型链的。


















