老师 有个问题

老师 有个问题

1.子类的静态方法调用父类 的pSay 为什么父类的pSay里的this会指向子类 指向子类之后子类后面实例化了C1 为什么username不是C1 呢

http://img1.sycdn.imooc.com//climg/5fe959ff090aea3706100750.jpg

在这里输入代码,可通过选择【代码语言】突出显示

正在回答

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

2回答

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

1、super作为对象,在子类静态方法cSay中使用时,指向的是父类,也就是super.pSay(),调用的是父类中的静态pSay方法。而pSay方法是在子类中调用中,所以使用this指向的是子类。简单理解就是super指向的是父类,而方法中this还是看在哪个作用域下使用的。


username是实例上的属性,不是类上的属性,不能通过类去调用,只能通过实例化的对象调用

http://img1.sycdn.imooc.com//climg/5fe9b1a509469d6803520090.jpg

http://img1.sycdn.imooc.com//climg/5fe9b1b009ed1f9002360064.jpg

pSay方法中的this指向的是子类,所以获取不到username属性值,为undefined。


2、super作为对象,在子类原型方法cShow中使用时,指向的是父类的原型对象,也就是super.pShow(),调用的是父类原型上的pShow方法。而cShow是通过实例化的c1对象调用的,所以this指向实例化的对象。简单理解就是super指向的是父类的原型,而方法中this还是看在哪个作用域下(或者哪个对象下)使用的。


color属性定义在Parent实例上,后来被child继承,所以也会有color属性,值为red 。但是通过super.color获取不到,父类原型上没有color属性,所以为undefined。


3、super.color可以等价于Parent.proptype.color ,没问题。


4、静态方法不是挂载到类原型上的,所以理解错误。简单理解:子类静态方法中super指向的是父类,super.xxx访问父类静态方法,子类原型方法中super指向的父类原型,super.xxx访问父类原型方法。

祝学习愉快!

  • 慕沐8204582 提问者 #1

    我今天全搞明白了  

    第一个是undefined是因为 

    在静态方法中调用super 静态方法的父类方法被子类调用

    this指向的是子类本身 而不是子类实例 所以是undefined 如果是子类实例那就是c1


    ​第二个是 red  是因为 

    调用子类(非静态)实例的方法 super.pShow指向了父类这个方法 而父类这个方法的this又指向的是子类的实例 然后子类继承了父类实例的color='red' 就代表子类有这个实例属性 所以是red


    第三个是 undefined是因为

    log(super.color)等价于 log(parent.prototype.color)而父类的color是实例上的 所以父类的原型上并没有color这个属性

    这样理解对吗 老师



    2020-12-29 14:56:27
  • 慕沐8204582 提问者 #2

    想了几遍应该没错 老茅塞顿开了

    2020-12-29 14:59:18
  • 好帮手慕星星 回复 提问者 慕沐8204582 #3

    你好,理解的没问题,很棒哦!

    2020-12-29 16:29:34
慕沐8204582 提问者 2020-12-28 12:18:10

我的理解是 子类调用super.XXXX的原理是 访问父类的属性或方法 但是 一旦父类的super.XXXX属性里有this 其实还是指向子类的是吗 子类本身或者继承上 有就有 没有就没有  


然后最后一个 super.color是调用父类的方法 解析上 是这么说的(super.color这句代码相当于访问父类原型上的color属性) 是不是等价于 Parent.proptype.color 而不是 (比方Parent被实例叫p1)new出来实例p1.color


总结就是 子类调用super.XXX永远访问的都是父类原型上 也就是静态的方法是吗 还是说 子类在静态方法中调用super就是访问父类的静态方法 不是静态方法 就访问实例呢 有点搞不懂

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

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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