代码不是很明白

正在回答 回答被采纳积分+1

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

1回答
好帮手慕慕子 2021-12-12 14:03:29

同学你好,可以结合下面的解析理解:

1、截图中的代码声明了两个构造函数,一个是People,一个是Student,可以将People看作是父类,Student是子类。

2、通过new关键字实例化People,从输出结果可知,People函数内部的this默认指向People当前实例对象

https://img1.sycdn.imooc.com//climg/61b58ddd097d7f3716520836.jpg

但是,由于在Student中通过call方法调用函数People,改变了People内部的this,让其指向了Student函数中的this

https://img1.sycdn.imooc.com//climg/61b58edd0911725e24981300.jpg

所以在执行 var xiaoming = new Student("小明", "男", 12, "小慕学校", 100666);这句代码实例化Student,

接下来依次执行Student函数内部的代码,执行People.call(this, name, sex, age);这句代码时,People函数的this等价于Student构造函数实例对象,那么People函数内部this.name = name等给this添加属性的代码,相当于就是给Student构造函数实例对象添加属性了,从而实现了Student继承People的一些属性。

所以最终实例化的Student对象,该对象下有name等属性,如下:

https://img1.sycdn.imooc.com//climg/61b58ff30947c76f16580536.jpg

祝学习愉快~

  • 提问者 球球不一般 #1

    这句话不是很明白,接下来依次执行Student函数内部的代码,执行People.call(this, name, sex, age);这句代码时,People函数的this等价于Student构造函数实例对象,那么People函数内部this.name = name等给this添加属性的代码,相当于就是给Student构造函数实例对象添加属性了,从而实现了Student继承People的一些属性。

    所以最终实例化的Student对象,该对象下有name等属性


    搜索

    复制

    2021-12-12 14:20:29
  • 好帮手慕慕子 回复 提问者 球球不一般 #2

    可以参考如下解析:

    1.  var xiaoming = new Student("小明", "男", 12, "小慕学校", 100666);执行这句代码,实例化Student函数,相当于调用了Student函数,依次执行Student函数内部的代码。

    2. People.call(this, name, sex, age);执行这句代码,调用People函数,参考老师第一次解析可知,此时People函数的this指向Student构造函数实例对象,如下:

      https://img1.sycdn.imooc.com//climg/61b5a315094851c016021246.jpg

    3. 所以不管是People还是Student函数内部给this添加的属性,都添加到Student实例对象上,如下:

      https://img1.sycdn.imooc.com//climg/61b5a3030987c7ec19021124.jpg

      所以输出的Student实例对象上有name、sex、age、arr、school和sid这些属性,如下:

      https://img1.sycdn.imooc.com//climg/61b5a383099a0f8417340592.jpg

    祝学习愉快~

    2021-12-12 15:24:34
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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