ES6的super()
时间: 2023-10-31 11:06:34 浏览: 57
深入浅析ES6 Class 中的 super 关键字
在 ES6 的类中, `super()` 是一个特殊函数,它用于调用父类的构造函数。在子类中,可以使用 `super()` 函数来调用父类的构造函数,从而在创建子类实例时初始化父类的属性。
在子类构造函数中使用 `super()` 函数时,需要注意以下几点:
1. 必须先调用 `super()` 函数,然后才能访问 `this` 对象。因为在调用 `super()` 函数时,父类的构造函数会先执行,所以必须先调用 `super()` 函数来初始化父类的属性和方法,才能访问 `this` 对象。
2. 如果子类没有定义构造函数,则默认使用父类的构造函数,并自动调用 `super()` 函数。
3. 如果子类定义了构造函数,则必须在构造函数中显式调用 `super()` 函数,否则会报错。
以下是一个示例代码,演示了如何在子类中使用 `super()` 函数:
```javascript
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name); // 调用父类的构造函数
this.breed = breed;
}
speak() {
super.speak(); // 调用父类的方法
console.log(`${this.name} barks.`);
}
}
let dog = new Dog('Rufus', 'Labrador Retriever');
dog.speak(); // 输出 "Rufus makes a noise." 和 "Rufus barks."
```
在上面的代码中,我们定义了一个 `Animal` 类和一个 `Dog` 类,`Dog` 类继承自 `Animal` 类。在 `Dog` 类的构造函数中,我们使用 `super(name)` 调用父类 `Animal` 的构造函数,并在子类中添加了一个新的属性 `breed`。在 `Dog` 类的 `speak()` 方法中,我们首先调用父类的 `speak()` 方法,然后输出新的信息。最后,我们创建了一个 `Dog` 类的实例 `dog`,并调用了它的 `speak()` 方法,输出了两行信息。
阅读全文