ES6继承中子类覆盖父类方法时可通过super复用父逻辑:方法内用super.methodName()调用父方法,构造函数首行必须super()初始化父属性,静态方法中super指向父类,instanceof基于原型链验证继承关系。

ES6继承中,子类覆盖父类方法时,既能替换原有行为,也能保留并复用父类逻辑——关键在于正确使用 super 关键字。
覆盖方法但保留父类执行
当子类重写父类同名方法(如 speak()),直接定义即可完成覆盖。若还需执行父类原逻辑,就在方法体内用 super.methodName() 显式调用。
- 覆盖不等于丢弃:重写只是提供新实现,不影响父类本身
-
super.speak()必须在子类方法内部调用,不能在构造函数或顶层作用域使用 - 调用顺序由你控制,比如先执行父类逻辑再添加子类处理,或反之
构造函数中必须先调用 super()
只要子类定义了 constructor,就必须在第一行调用 super(),传入父类所需参数。否则无法访问 this,会报 ReferenceError。
-
super()本质是执行父类构造函数,初始化继承来的属性(如this.name、this.age) - 子类自己的属性(如
this.grade、this.token)应在super()之后赋值 - 漏掉
super()或位置不对,会导致实例缺少父类属性,甚至运行时报错
静态方法也可被 super 调用
父类的静态方法会被子类继承,子类静态方法中可用 super.staticMethod() 调用父类对应静态方法,适用于工具逻辑分层复用。
- 静态成员属于类本身,不依赖实例,适合放配置、校验、工厂函数等
-
super在静态上下文中指向父类,不是实例,所以调用的是类级别的方法 - 子类可定义同名静态方法覆盖父类,同时仍通过
super复用父逻辑
instanceof 验证继承关系可靠
用 instanceof 判断实例是否属于某类或其父类,结果准确反映原型链结构,适合运行时类型检查。
-
new Dog() instanceof Animal返回true,即使Dog重写了所有方法 - 该判断基于原型链,不受方法覆盖影响,比仅检查方法存在更可靠
- 配合 TypeScript 类型守卫或运行时策略分支时很实用


















