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

JavaScript中所有对象的原型链顶端是否指向同一Prototype Object?

所有JavaScript对象的原型链顶端都指向同一个对象原型吗?

从你贴的代码结果来看,这个结论大部分情况下是成立的,但要注意存在几个特殊例外。

先分析你的代码验证逻辑

你写的代码覆盖了几种常见的JavaScript值/对象类型,它们的原型链最终都指向了同一个Object.prototype:

  • 原始值a=10会被自动包装为Number对象,原型链是:Number实例 → Number.prototype → Object.prototype → null
  • 字面量对象b和new Object()创建的c,原型链直接是:对象实例 → Object.prototype → null
  • 普通函数fun的prototype属性是一个默认的普通对象,它的原型链同样指向Object.prototype

所以你看到的几个console.log都返回true,核心原因就是它们最终都指向了全局唯一的Object.prototype,而Object.prototype的原型是null——这就是JavaScript原型链的顶端终点。

例外情况:并非所有对象都遵循这个规则

最典型的反例是用Object.create(null)创建的对象:

const noProtoObj = Object.create(null);
console.log(noProtoObj.__proto__); // undefined
console.log(Object.getPrototypeOf(noProtoObj)); // null

这个对象没有任何原型,它的原型链直接终止于null,完全不经过Object.prototype,因此它不会继承Object.prototype上的任何方法(比如toString()、hasOwnProperty()),这在需要避免原型污染的场景中很有用。

另外,部分引擎内部的特殊对象(比如早期环境中的arguments对象)可能也存在特殊的原型链实现,但现代引擎已经基本将这类对象标准化,日常开发中最常见的例外就是Object.create(null)创建的“无原型对象”。

总结

日常开发中遇到的绝大多数对象,原型链顶端都是Object.prototype,这一点和Java中所有对象继承自Object类的逻辑非常相似,但要记住Object.create(null)这种特殊情况,它打破了这个通用规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:08:15