js constructor super
时间: 2023-09-21 16:06:41 浏览: 43
回答: 在Javascript中,constructor和super是用于继承中的关键字。constructor是用于定义类的构造函数,用于创建对象实例时进行初始化操作。而super用于调用父类的构造函数。当在子类中使用super()时,它会绑定子类的this,并调用父类的构造函数。同时,super也可以用来访问父类的属性和方法。在构造函数中,使用super调用父类的构造函数是必须的,因为子类继承了父类的属性和方法,但是子类没有自己的this对象,需要通过调用父类的构造函数来初始化自己的属性。另外,如果在子类中通过super对某个属性赋值,那么super在这里相当于this,赋值的属性会变成子类实例的属性。
相关问题
js继承的super
在JavaScript中,继承可以使用关键字super来实现。引用提到了super的几个用法:
1. 在constructor中调用super:子类的构造函数中,只有调用super之后,才可以使用this关键字,否则会报错。
2. super作为函数时,只能用在子类的构造函数中,用于调用父类的构造函数。
3. super作为对象时,在普通方法中,指向父类的原型对象,在静态方法中,指向父类。
需要注意的是,引用中提到了一个具体的例子,展示了使用super的方式。在该例子中,son1对象使用了es6新定义的方法的简写方式,可以正常调用super.func()来调用父类的方法,而son2对象使用了传统的函数表达式方式定义的方法,无法使用super调用父类的方法,会导致出错。
因此,js继承中的super关键字主要用于在子类中调用父类的方法和构造函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [JavaScript继承与聚合实例详解](https://download.csdn.net/download/weixin_38617001/14815401)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [js中super的使用](https://blog.csdn.net/weixin_43801836/article/details/126288873)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
JAVASCRIPT 中的super方法
在 JavaScript 中,`super` 方法是用于调用父类方法的关键字。它可以在子类中使用,以便调用父类的构造函数、静态方法和原型方法。使用 `super` 方法可以避免在子类中重复编写父类的代码。
在 ES6 中,使用 `super` 方法要注意以下几点:
1. 在子类的构造函数中,必须先调用 `super()` 方法,以便完成父类的初始化。
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) {
super(name); // 调用父类的构造函数
}
speak() {
super.speak(); // 调用父类的同名方法
console.log(this.name + ' barks.');
}
}
let d = new Dog('Mitzie');
d.speak(); // 输出 "Mitzie makes a noise." 和 "Mitzie barks."
```
在上面的示例中,`Dog` 类继承自 `Animal` 类。在 `Dog` 类的构造函数中,我们使用 `super(name)` 调用了父类的构造函数,并传入了一个参数。在 `Dog` 类的 `speak` 方法中,我们使用 `super.speak()` 调用了父类的同名方法,并在其后面添加了自己的逻辑。最终,我们创建了一个 `Dog` 对象 `d`,并调用了它的 `speak` 方法,输出了两行信息。第一行信息是来自父类的,第二行信息是来自子类的。