用class实现继承需用extends声明父类并在子类constructor首行调用super()初始化this;可重写方法并用super.调用父逻辑;原型与静态方法自动继承,实例属性须在super()后设置。

用 class 实现继承并扩展父类功能,核心是 extends + super(),关键在子类中既能复用父类逻辑,又能添加或调整行为。不是简单复制代码,而是建立可维护的层级关系。
必须写 extends 和首行 super()
子类声明要明确继承谁,构造函数里必须第一句调用 super(),否则会报错:ReferenceError: Must call super constructor...。super() 不只是“走个过场”,它真正执行父类构造函数、初始化 this,之后才能给子类实例赋值。
- 父类有参数(比如
name),super 就得传进去:super(name) - 子类自己新增属性(比如
breed),一定要写在super()之后:this.breed = breed - 如果子类没写 constructor,JS 会自动补一个
constructor(...args) { super(...args); }
方法重写 + super. 调用父版逻辑
子类可以定义同名方法覆盖父类行为,但不需要从头写全部。常用做法是在新方法里用 super.方法名() 先执行父类原有逻辑,再追加自己的处理。
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
- 比如父类
speak()打印基础声音,子类重写时先super.speak(),再加一句console.log('— woof!') - super 在实例方法中指向父类原型,所以能访问父类的普通方法、getter/setter,甚至
super.toString()这类内置方法 - 注意:不能在静态方法里用
super()调构造函数,但可以用super.staticMethod()调父类静态方法
自动继承原型方法和静态方法
只要父类方法写在 class 内部(非 constructor 里)、没加 static,子类实例就能直接用;父类用了 static 声明的方法,子类类本身也能直接调用,无需额外操作。
- 父类的
get fullName() { return this.name; },子类实例可直接读child.fullName - 父类的
static createDefault() { return new this('default'); },子类可直接Dog.createDefault() - 实例属性(如
this.life = 3)需在super()后设置;原型方法(如attack() {})自动可用
扩展功能的实际例子
比如游戏里角色共用生命值、移动逻辑,但不同角色有专属技能:
- 父类
Character提供move(x, y)和this.hp = 100 - 子类
Warrior继承后增加shieldBlock(),并在takeDamage()中重写:先super.takeDamage(),再按概率触发格挡减伤 - 子类
Mage加了castSpell(),同时把move()改成瞬移效果,但仍保留原移动基础坐标计算










