JavaScript子类通过extends继承父类静态方法,可直接用子类名调用;静态方法属类本身,实例无法访问;子类可重写或用super调用父类静态方法;静态属性默认不继承,需用static get模拟。

JavaScript 中子类能直接继承父类的静态方法,但不能通过实例调用,只能通过子类自身(类名)调用。
静态方法会被子类继承
使用 extends 的子类会自动继承父类的静态方法,无需额外声明或复制。继承后,子类可以直接用 子类名.静态方法名() 调用。
- 静态方法属于类本身,不是实例,所以不会出现在
new SubClass()创建的对象上 - 子类继承的是“类层级”的静态成员,不是原型链上的东西
- 父类静态方法中的
this指向调用它的那个类(父类或子类),不是实例
调用方式必须是类名调用
不能用实例访问静态方法,否则报错;也不能省略类名直接写方法名。
- ✅ 正确:
Animal.eat();、Dog.eat();(Dog 继承了 Animal 的静态 eat) - ❌ 错误:
const d = new Dog(); d.eat();→ 报错:TypeError: d.eat is not a function - ❌ 错误:
eat();→ 报错:未定义
子类可重写或扩展父类静态方法
子类可以定义同名静态方法覆盖父类版本,也可以在内部用 super.方法名() 调用父类静态方法。
- 重写示例:
static eat() { console.log('Dog eats bones'); } - 调用父版:
static eat() { super.eat(); console.log('…then chews'); } - 注意:
super在静态方法中只能用于调用父类的静态方法,不能用于构造函数或实例方法
静态属性不被继承(ES2022 之前)
传统 class 语法中,static prop = value 这样的静态属性默认不被子类继承(子类访问会得 undefined)。若需共享,建议改用静态方法返回值,或升级到支持公共静态字段的环境并显式赋值。
- 父类写
static version = '1.0';→ 子类Dog.version是undefined - 兼容写法:用静态 getter
static get version() { return '1.0'; },子类可继承并访问


















