JavaScript中静态属性不会被子类自动继承,子类需显式通过父类名访问;同名静态属性仅遮蔽而非覆盖父类,两者独立存在;静态方法中this指向实际调用类,不自动回退查找父类静态属性,super不能读取静态属性。

JavaScript 中静态属性不会被子类自动继承,但可通过类名显式访问;子类定义同名 static 属性时,只是遮蔽父类,不修改也不删除父类原始值。
静态属性不自动出现在子类上
与实例属性不同,static 属性直接挂在类构造函数上,不属于原型链,也不会随 extends 自动复制到子类。子类直接访问同名属性会得到 undefined:
class Parent { static flag = true; }class Child extends Parent {}-
Child.flag返回undefined,不是true - 必须写
Parent.flag才能读取
子类同名 static 属性是遮蔽,不是覆盖
子类声明 static flag = false 后,Child.flag 返回 false,但 Parent.flag 仍为 true —— 两者互不影响:
- 父类和子类各自拥有独立的静态属性空间
- 这种“覆盖”本质是子类新增一个同名属性,遮蔽了对父类同名属性的默认访问路径
- 父类静态属性未被修改、未被删除,依然可被其他代码或子类静态方法通过
Parent.flag访问
静态方法中 this 指向调用者类
静态方法内部的 this 不是指向父类,而是指向实际调用它的类(可能是子类):
立即学习“Java免费学习笔记(深入)”;
-
Parent.describe()中this === Parent -
Child.describe()中this === Child(即使未重写该方法) - 因此
static describe() { return this.flag; }在子类上调用时,会读取Child.flag(如果存在),否则沿构造函数链查找?不,this.flag就是当前类自身的flag,不会自动回退到父类
无法用 super 读取静态属性
super 在静态方法中仅支持调用父类静态方法,不能用于读取静态属性:
-
super.flag会报错 - 正确方式是显式写
Parent.flag - 若需复用逻辑,建议将共享值提取为顶层常量,或在父类中提供
static getFlag()方法供子类调用或重写


















