在 JS class 中,子类 constructor 必须首行调用 super() 初始化 this,参数需匹配父类签名;super() 后才能访问 this 或设置子类属性;实例方法中 super.xxx() 可调父类方法,静态方法中 super 指向父类。

在 JS class 语法中,调用超类(父类)构造函数必须使用 super(),且仅在子类显式定义了 constructor 时才需手动调用;它负责初始化 this,是访问实例属性和方法的前提。
super() 必须在子类 constructor 第一行执行
子类若重写了 constructor,就必须在任何使用 this 之前调用 super(),否则会立即抛出 ReferenceError:
- ❌ 错误:访问
this在super()之前 → 报错 “Must call super constructor…” - ✅ 正确:
super()是 constructor 中第一句,之后才能赋值this.xxx
super() 参数要匹配父类 constructor 签名
父类构造函数如果接收参数,子类必须通过 super(...) 传入对应实参:
- 父类写
constructor(name, id)→ 子类需写super(name, id) - 父类无参 → 可写
super()或省略参数,但不能省略调用 - 不传或传错类型/个数,不会报语法错误,但父类逻辑可能失效(如
this.name未设置)
调用 super() 后才能初始化子类专属属性
super() 执行完毕,this 才被正确绑定,此时可安全添加子类自己的实例属性:
- 例如:
super(name); this.breed = breed; - 属性赋值顺序影响最终状态:父类初始化在前,子类补充在后
- 避免在
super()前做任何依赖this的操作(包括方法调用、解构、打印)
super 不只是调构造函数,还能调父类方法
在实例方法中,super.xxx() 可调用父类同名方法(含 get/set),常用于方法重写后的增强逻辑:
- 比如子类
speak()中先执行super.speak(),再追加行为 - 注意:
super在静态方法中指向父类本身,可用于调用父类静态方法











