super总结,老师 帮忙看下是否有错误及需要补充的地方
(1)作为函数调用:super代表父类的构造方法,只能用在子类的构造方法中,用在其他地方会报错;super虽然代表了父类的构造方法,但是内部的this指向子类的实例
```
class Person{
constructor(name){
this.name=name;//this指向子类实例
}
}
class Programmer extends Person{
constructor(name){
super(name);//super中的this指向子类实例
}
}
new Person('immoc');
const p=new Programmer('liu');
console.log(p.name);
```
(2)作为对象使用
①在构造方法中使用或一般方法中使用:super代表父类的原型对象Person.prototype,所以定义在父类实例上的方法或属性,是无法通过super调用的;通过super调用父类的方法时,方法内部的this指向当前的子类实例
②在静态方法中使用:指向父类,而不是父类的原型对象;通过super调用父类的方法时,方法内部的this指向当前的子类,而不是子类的实例
```
class Person{
constructor(name){
this.name=name;
console.log(this);//this指向子类
}
speak(){
console.log('speak');
console.log(this);//this指向子类
}
static speak(){
console.log('Person speak');
console.log(this);
}
}
class Programmer extends Person{
constructor(name,sex){
super(name,sex);
}
//一般方法
speak(){
super.speak();
console.log('Programmer speak');
}
//静态方法
static speak(){
super.speak();
console.log('Programmer static speak');
}
}
const p=new Programmer();
p.speak();
Programmer.speak();
```
(3)注意事项
使用super的时候,必须显式指定是作为函数还是作为对象使用,否则会报错
super()——作为函数使用
super.speak——作为对象使用
正在回答
同学你好,关于super的总结很全面、很正确,继续加油,祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星