You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构造函数间原型继承后实例构造函数显示为父类的问题

构造函数间原型继承后实例构造函数显示为父类的问题

这个问题其实是原型继承里的常见小坑,我来给你捋明白~

你之所以看到实例mike的构造函数显示为Person,核心原因是你在设置原型继承的时候,弄丢了Student.prototype上的constructor属性。

咱们拆解一下背后的逻辑:

  • 默认情况下,每个构造函数的prototype对象都自带一个constructor属性,指向构造函数本身——也就是Student.prototype.constructor原本指向Student,Person.prototype.constructor指向Person。
  • 当你执行Object.setPrototypeOf(Student.prototype, Person.prototype)时,相当于把Student.prototype的原型链顶端换成了Person.prototype。这时候Student.prototype自身不再有constructor属性,当访问mike.constructor时,会顺着原型链往上找,最终找到Person.prototype.constructor,也就是Person。

知道原因就好解决了,只需要在设置完原型继承后,手动把Student.prototype的constructor属性指回Student就行:

//Inheritance
Object.setPrototypeOf(Student.prototype, Person.prototype)
// 新增这一行,修正constructor指向
Student.prototype.constructor = Student

Student.prototype.introduce = function () {
  console.log(`My name is ${this.firstName} and I study ${this.course}`);
}

这样修改后,你再打印mike,控制台里显示的构造函数就会是Student了,而且mike.constructor也会正确指向Student构造函数。

备注:内容来源于stack exchange,提问作者asdasd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:23:13