super总结,老师 帮忙看下是否有错误及需要补充的地方

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——作为对象使用


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,关于super的总结很全面、很正确,继续加油,祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师