prototype继承问题

prototype继承问题

Student.prototype = new People()

这句话中为什么student的prototype 等于一个实例对象能直接继承方法?是不是这句话等于下面一句话

Student.prototype = (new People()).__proto__

因为__proto__ 才能指向构造函数的prototype

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

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

1回答
好帮手慕小李 2025-07-11 23:36:11

同学你好,这个问题问的不错也很关键。

首先理解上是可以这么理解,但是这里一定要注意的是虽然(new People()).__proto__ === People.prototype,那么直接用Student.prototype = People.prototype;也没什么问题,但不建议这么用因为这样会导致:

1、Student.prototype 直接指向 People.prototype,而不是一个 People 实例。

2、所有 Student 实例将共享 People.prototype 上的属性和方法,但不会继承 People 构造函数中定义的实例属性。

3、如果你在 Student.prototype 上添加属性,会污染 People.prototype,影响所有 People 实例(也就是我们常说的会污染父类)

***目前我们在工作中更推荐用Student.prototype = Object.create(People.prototype)这样就不会继承实例属性,只继承原型方法了。


祝学习愉快!

  • 提问者 Chunjiang #1

    非常感谢老师,待我消化一下

    2025-07-11 23:49:36
  • 好帮手慕小李 回复 提问者 Chunjiang #2

    就按照你目前那种理解的方式先理解就ok,但是在工作中还是按照Object.create(People.prototype)这样的方式去做就ok。

    2025-07-12 00:50:10
  • 提问者 Chunjiang 回复 好帮手慕小李 #3

    多谢老师。我理解执行Student.prototype = People.prototype后 People.prototype被污染的原因是prototype是个对象,对象是引用类型,所以修改student的prototype后People的prototype也会被修改。不过还有一个事情我想不同,就是Student.prototype = new People()这句话执行后,new People() 生成一个空对象,为什么Student.prototype等于一个空对象,会继承对象的构造函数的方法?

    2025-07-12 17:39:53
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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