es6的extends自动继承父类静态方法,子类可直接通过类名调用;静态方法挂载于构造函数__proto__链,不依赖实例,不可通过实例访问,this指向当前类。

ES6 的 extends 会自动继承父类的静态方法,不需要额外操作,子类直接通过类名就能调用。
静态方法继承是默认行为
父类定义的 static 方法,会直接挂载到子类构造函数上。子类无需重写或手动复制,就能使用这些方法。
- 例如
Parent.doSomething()可以直接写作Child.doSomething() - 这种继承发生在类声明时,基于构造函数的
__proto__链:子类构造函数的原型指向父类构造函数 - 静态方法不依赖实例,所以不会出现在原型链上,而是通过构造函数层级向上查找
子类可扩展或覆盖静态方法
子类可以定义同名静态方法来覆盖父类逻辑,也可以在内部用 super 调用父类静态方法。
- 在子类静态方法中,
super指向父类(不是父类原型),因此super.methodName()是合法的 - 覆盖时注意:仅当子类显式定义了同名
static方法,才会遮蔽父类版本;否则自动沿用 - 静态属性(如
static VERSION = '1.0')同样被继承,ES2022+ 支持直接声明,旧环境可用赋值方式补充
不能通过实例访问静态方法
静态方法属于类本身,实例对象无法调用,哪怕继承了也不行。
-
new Child().doSomething()会报错,因为该方法不在实例或其原型上 - 必须用
Child.doSomething()或Parent.doSomething()这种类名调用形式 - 这也意味着静态方法里的
this指向当前类(Child或Parent),不是实例
与实例方法继承的关键区别
静态方法和实例方法的继承路径不同,不能混淆。
- 实例方法靠原型链:子类实例 → 子类 prototype → 父类 prototype
- 静态方法靠构造函数链:子类 →
__proto__→ 父类 →__proto__→ Function.prototype - 所以
Child instanceof Parent为true,但Child.__proto__ === Parent才体现静态继承关系











