ES6中class继承为什么一定要写super()?super代表什么?
在ES6中,class
关键字用于定义一个类,而 extends
关键字则用于实现类之间的继承。当一个类继承自另一个类时,子类的构造函数中必须调用 super()
方法。这是因为 super()
实际上调用了父类的构造函数,以确保父类中的属性和方法能够被正确地初始化并继承到子类中。
super
关键字在类继承中有两个主要的用途:
- 调用父类的构造函数:在子类的构造函数中,
super()
用于调用父类的构造函数。这是必需的,因为在子类构造函数中,this
关键字引用的是子类的一个实例。在调用super()
之前,this
还不是一个完全初始化的对象,因此你不能在调用super()
之前引用this
。
例如:
class Parent {
constructor(name) {
this.name = name;
}
}
class Child extends Parent {
constructor(name, age) {
super(name); // 调用父类的构造函数,并传递参数
this.age = age; // 在调用 super() 之后,可以安全地使用 this
}
}
- 访问父类的方法:在子类中,你可以使用
super
关键字来调用父类的方法。这允许你在重写父类方法的同时,仍然能够访问和调用父类的原始实现。
例如:
class Parent {
sayHello() {
console.log('Hello from Parent');
}
}
class Child extends Parent {
sayHello() {
super.sayHello(); // 调用父类的 sayHello 方法
console.log('Hello from Child');
}
}
总的来说,super
关键字在ES6类继承中扮演着连接父类和子类的重要角色。它确保父类的属性和方法能够正确地初始化并继承到子类中,同时也允许子类在需要时访问和调用父类的方法。