JavaScript的class继承本质是原型链的语法糖:extends同时设置实例方法链(Child.prototype.__proto__→Parent.prototype)和静态方法链(Child.__proto__→Parent),super调用基于原型查找,constructor与prototype关系不变。

JavaScript 的 class 继承模型不是独立的新机制,它完全映射到已有的原型链结构上——只是语法更简洁、语义更清晰的封装。
class extends 会改写 prototype 链
当你写 class Child extends Parent,JavaScript 引擎实际做了三件事:
- 把
Child.prototype.__proto__指向Parent.prototype,建立方法继承链 - 把
Child.__proto__指向Parent,让静态方法也能被继承(比如Parent.method()可被Child.method()调用) - 确保
new Child()创建的实例,其__proto__指向Child.prototype,而Child.prototype.__proto__又指向Parent.prototype,最终连到Object.prototype → null
constructor 和 prototype 的对应关系不变
即使用了 class,底层仍是函数对象和原型对象协作:
-
class Parent {}本质是function Parent() {},它仍有prototype属性 -
Parent.prototype.constructor仍指向Parent,Child.prototype.constructor指向Child(除非手动覆盖) - 所有实例的
__proto__依然只读取自构造函数的prototype,不因class语法改变
super() 调用的是原型上的方法,不是父类构造函数本身
super() 在子类构造器中执行时,等价于 Parent.call(this, ...args);在方法中调用 super.xxx(),则是沿着 this.__proto__.__proto__ 查找 xxx ——也就是在 Parent.prototype 上找。这说明 super 是原型链查找的语法糖,不是绕过原型的特殊通道。
立即学习“Java免费学习笔记(深入)”;
静态属性和方法也走原型链,但层级不同
静态成员继承靠的是构造函数自身的 __proto__ 链:
-
Child.__proto__ === Parent→ 所以Parent.staticMethod()可被Child.staticMethod()访问 -
Parent.__proto__ === Function.prototype→ 所有类/函数的静态方法最终来自Function.prototype - 这和实例方法的
__proto__链(instance → Child.prototype → Parent.prototype → Object.prototype)是两条并行的原型链


















