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

关于console.log与Object.getPrototypeOf的控制台输出困惑

控制台显示原型对象的差异解释

先明确:你的代码逻辑完全没问题,Object.getPrototypeOf(john)确实等于Passenger.prototype,控制台显示的差异只是不同浏览器开发者工具的可视化策略不同,和代码本身的原型链结构无关。

为什么Chrome/Edge显示Person?

Chrome和Edge的控制台在显示原型对象时,会优先展示该原型对象的上级原型对应的类名,同时在展开后会显示自身的constructor属性。

你的代码中,Passenger.prototype的原型是Person.prototype,且Passenger.prototype本身没有自定义属性/方法(两个类的构造函数都是空的),所以控制台会简化显示为Person,但展开这个对象后,你能看到它的constructor是Passenger,也能看到完整的原型链层级。

这种显示逻辑的初衷是帮开发者快速定位原型的继承来源,但确实容易让不熟悉原型链的人产生误解。

为什么Firefox显示Object?

Firefox的控制台显示策略更偏向于展示对象的基础类型。由于所有自定义类的原型最终都会继承自Object.prototype,当原型对象没有独特的自定义内容时,Firefox会直接显示Object,同样展开后能看到完整的constructor和原型链信息。

如何确认原型的真实身份?

如果想避免显示带来的混淆,直接用严格相等运算符验证即可:

console.log(Object.getPrototypeOf(john) === Passenger.prototype); // true
console.log(Object.getPrototypeOf(john) === Person.prototype); // false

或者在控制台中展开显示的对象,查看constructor属性和完整的原型链,就能看到最准确的结构。

内容的提问来源于stack exchange,提问作者Delmo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:15:14