原型链的“最高层”是Object.prototype,其[[Prototype]]为null;可通过循环调用Object.getPrototypeOf直至返回null来抵达,Object.getPrototypeOf(Object.prototype)即为null。

Object.getPrototypeOf 本身只能获取**直接父原型**,不能一步拿到原型链最顶层(即 null)。要到达最高层,需循环调用它,直到返回 null。
什么是原型链的“最高层”?
JavaScript 中所有对象的原型链最终都终止于 Object.prototype,它的 [[Prototype]] 是 null。所以“最高层”严格来说是 Object.prototype;再往上就没了——Object.getPrototypeOf(Object.prototype) 返回 null,表示链结束。
如何一步步走到最高层?
用 while 循环反复取原型,直到结果为 null:
- 从目标对象开始,每次调用
Object.getPrototypeOf(obj) - 把返回值赋给
obj,继续下一轮 - 当某次返回
null,说明上一轮的对象就是链顶端(即Object.prototype)
一个实用的辅助函数
可以封装成函数,返回原型链上所有原型(含 Object.prototype,不含 null):
function getPrototypeChain(obj) {
const chain = [];
let current = obj;
while (current !== null) {
chain.push(current);
current = Object.getPrototypeOf(current);
}
return chain;
}
// 示例:[] 的原型链
getPrototypeChain([]);
// [Array.prototype, Object.prototype]
注意边界情况
以下对象的原型链起点不同,但终点一致:
-
Object.create(null)创建的对象,其原型直接为null,链长为 0 - 普通对象(如
{})→Object.prototype→null -
new Date()→Date.prototype→Object.prototype→null

















