子类不能自动继承父类静态属性,需显式处理;常用方式有显式赋值、重新声明、getter代理;子类静态方法中可用super调用父类静态方法,但不可读取静态属性。

子类不能自动继承父类的静态属性,必须显式处理。ES6 中静态成员不随 extends 自动复制到子类构造函数上,这是和实例属性的关键区别。
静态属性不会自动继承
即使写了 class Child extends Parent,Child.staticProp 依然为 undefined,除非手动赋值或重定义。这是因为静态属性挂在构造函数本身,而子类构造函数并不会自动复制父类构造函数上的属性。
三种常用扩展方式
-
显式赋值(最常用):在子类定义后直接挂载,如
Child.staticProp = Parent.staticProp。简单可靠,适合常量或不可变值。 -
在子类中重新声明:直接写
static staticProp = 'xxx'。可覆盖或定制,但失去与父类的同步性。 -
通过 getter 动态代理:在子类中定义
static get staticProp() { return Parent.staticProp; }。父类更新时子类自动响应,适合需保持一致性的场景。
静态方法里的 super 调用
在子类静态方法中,可用 super 调用父类静态方法(如 super.staticMethod()),但仅限于方法调用,不能用于读取静态属性。想复用父类静态逻辑时,这种方式很实用。
注意原型链不适用于静态属性查找
静态属性查找只沿构造函数自身的属性链(即 Child.__proto__ 链),而非实例的 __proto__。所以不能指望“访问不到就往上找”——必须确保属性明确存在于子类构造函数上。


















