关于super

来源:4-2 super关键字的其他内容

粉墨登场

2021-04-15 17:54:10

问题描述:

老师你好,关于super,第一个问题:super是不是只有继承的时候才会使用?。 第二个问题:在子类的原型对象中使用super,指向父类的原型对象,而在子类本身(子类的静态属性和方法)中使用super,指向的是父类本身(父类的静态属性和方法)。  第三个问题:调用super时,父类的this始终指向子类的this,这句话并不明白什么意思,视频中的例子在子类原型对象上的方法中通过super调用了父类原型对象上的方法,并将子类的this当作参数传入了,并和父类的this做了比较,没看出来哪里使用了super,所以不理解这句话:调用super时,父类的this始终指向子类的this。



在子类中使用super就分为两个场景:继承时在子类的constructor构造器的第一行使用super用于继承父类的属性和方法,第二种:以对象调用属性或方法的方式调用super,这也分两种情况,就是上面所说的第二个问题。



总结:子类中使用super,要么是用于继承,写在constructor构造器的第一行,要么是在子类原型对象上这时super指向父类的原型对象,要么是写在子类本身的静态属性或方法,这时super指向父类本身的静态属性或方法。 请老师看一下上面的几个问题和其它的理解。


写回答

1回答

好帮手慕星星

2021-04-15

同学你好,问题解答如下:

1、不是绝对的,super可以用在类的继承中,或者对象字面量中,super指代了整个prototype或者__proto__指向的对象。

super用在继承中也就是课程中讲解的那种,还有一种是手动设置对象原型指向另外一个对象,有父类,例如:

http://img.mukewang.com/climg/6078116c0915c9c806240433.jpg

obj2的原型为obj1,所以在obj2中可以使用super,类似于继承,这里了解一下即可。

2、在继承时super不一定要写,所以不要理解的太绝对

http://img.mukewang.com/climg/607812bd0925863d08340136.jpg

继承的关键字是extends,有这个就可以,super也可以不写,如下

http://img.mukewang.com/climg/607812e809eb169904360231.jpg

子类中继承了父类中的属性

http://img.mukewang.com/climg/607812ff09de58fb03130088.jpg

如果子类中写了constructor,那么super是一定要写的,这点要牢记

http://img.mukewang.com/climg/607813540915ef0504850347.jpg

http://img.mukewang.com/climg/6078135c09688a7c00000000.jpg

3、这点理解是正确的

http://img.mukewang.com/climg/6078138f09b9a05408360163.jpg

4、意思是在子类中通过super调用父类方法,虽然是父类的方法,但是父类方法中的this不指向父类,指向子类

http://img.mukewang.com/climg/60781437099ba5c910260555.jpg

所以课程中验证this是相等的。

自己再理解下,祝学习愉快!

0

0 学习 · 10739 问题

查看课程