可以通过反复调用object.getprototypeof逐级获取原型直至null来还原完整继承路径,起点为对象的[[prototype]],终点为null,中间可能包含object.prototype、内置构造器原型或自定义类原型,需注意object.create(null)对象无object.prototype祖先。

可以通过反复调用 Object.getPrototypeOf,从目标对象出发逐级向上获取其原型,直到到达 null(原型链终点),从而完整还原继承路径。
明确原型链的起点和终点
每个普通对象的原型链始于自身 [[Prototype]](即 __proto__ 或 Object.getPrototypeOf(obj)),终于 null。中间可能经过 Object.prototype、内置构造器原型(如 Array.prototype)、自定义类原型等。关键是要意识到:不是所有对象都直接继承自 Object.prototype,比如 Object.create(null) 创建的对象没有 Object.prototype 作为祖先。
手动遍历原型链并收集轨迹
写一个简单循环,每次取当前对象的原型,存入数组,再将当前对象更新为该原型,直到返回 null:
- 初始化一个空数组
path = [] - 设
current = obj - 当
current !== null时,执行:
• 将current推入path
• 更新current = Object.getPrototypeOf(current) - 最终
path就是从原对象到null的完整原型序列
识别关键原型节点的特征
仅列出构造函数名或 constructor.name 容易误导(例如箭头函数无 constructor,或原型被篡改)。更稳妥的方式是结合以下判断:
- 用
current === Object.prototype检查是否到达基础对象原型 - 用
current === Array.prototype或current === Date.prototype精确匹配内置原型 - 对自定义类实例,可通过
current.constructor && current.constructor.name辅助标注(但不依赖它定位) - 注意
Function.prototype是所有函数对象的共同上层原型,但它本身继承自Object.prototype
处理特殊情况:非对象值与 null 原型
Object.getPrototypeOf 只接受对象类型参数。传入原始值(如字符串、数字)会先被装箱,返回对应包装对象的原型(String.prototype、Number.prototype 等);传入 null 或 undefined 则抛错。若对象由 Object.create(null) 创建,其原型链只有一层——它自己,再往上就是 null,不会出现 Object.prototype。











