es6中extends继承本质是子类原型链指向父类并支持构造调用与方法复用,需在子类constructor首行调用super(),自动继承原型方法、静态成员,并可通过super访问父级实现。

在 ES6 class 中用 extends 实现继承,本质是让子类的原型链指向父类,同时支持构造函数调用和方法复用。关键在于正确使用 extends 声明继承关系,并在子类构造器中通过 super() 调用父类构造函数。
语法结构:声明继承 + 调用 super
子类必须显式调用 super()(且必须在使用 this 之前),否则会报错。这是因为子类实例的初始化依赖父类构造逻辑。
- 父类定义普通 class,子类用
class Child extends Parent声明继承 - 子类若定义了
constructor,第一行必须是super(...),传参需匹配父类构造器签名 - 若子类不写
constructor,会默认添加constructor(...args) { super(...args); }
继承属性与方法:自动获得原型上的所有可访问成员
extends 不仅继承构造函数,还让子类原型对象的 [[Prototype]] 指向父类原型,因此所有定义在父类 prototype 上的方法(包括 getter/setter)都能被子类实例直接调用。
- 父类中用
method() {}定义的方法自动挂载到Parent.prototype - 子类实例调用该方法时,内部
this指向子类实例,但执行的是父类原型上的函数 - 静态方法和静态属性也通过
extends继承(Child.__proto__ === Parent)
重写与扩展:用 super 访问父级实现
子类可以重写父类方法,同时通过 super.methodName() 在重写逻辑中调用父类版本,实现功能增强而非完全替换。
- 在实例方法中,
super.xxx等价于从父类原型上查找xxx - 在静态方法中,
super.xxx查找的是父类自身(即Parent.xxx) - 不能在箭头函数或非方法上下文中使用
super,会报语法错误
注意事项:避免常见陷阱
继承看似简洁,但几个细节容易出错:
- 子类构造器里没写
super()→ 报ReferenceError: Must call super constructor -
super()写在this之后 → 报ReferenceError: this is not defined - 父类构造器返回对象(非常规情况)→ 子类
this可能被覆盖,需谨慎处理 - 试图在类声明外用
extends(如函数、对象)→ 仅支持继承另一个 class 或null
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











