object.getprototypeof()可逐级获取对象原型链直至null,推荐替代非标准__proto__;函数getprototypechain返回含所有祖先原型(不含null)的数组;constructor.prototype不可靠,而object.getprototypeof()始终准确。

在 JavaScript 中,可以通过 Object.getPrototypeOf() 逐级获取对象的原型,从而手动追踪原型链上的所有祖先原型,直到到达 null(原型链终点)。
用 Object.getPrototypeOf() 一级一级向上查
每个对象都有一个内部属性 [[Prototype]],它指向该对象的原型。虽然早期可通过非标准的 __proto__ 访问,但推荐使用标准、安全的 Object.getPrototypeOf()。
- 对任意对象调用
Object.getPrototypeOf(obj),返回它的直接原型 - 对返回结果再次调用,就能拿到上一级原型,依此类推
- 当结果为
null时,说明已到达原型链顶端
写个简单函数自动列出整条原型链
下面是一个通用工具函数,返回从目标对象开始、包含所有祖先原型(不含 null)的数组:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
function getPrototypeChain(obj) {
const chain = [];
let current = obj;
while (current !== null) {
chain.push(current);
current = Object.getPrototypeOf(current);
}
return chain;
}
// 示例
const arr = [1, 2];
console.log(getPrototypeChain(arr));
// 输出:[Array(2), Array.prototype, Object.prototype, null]
注意 constructor 和 prototype 的区别
初学者容易混淆:obj.constructor.prototype 不一定等于 Object.getPrototypeOf(obj),尤其在构造函数被修改或继承关系被破坏时。
-
Object.getPrototypeOf(obj)总是返回真实的原型对象(可靠) -
obj.constructor.prototype是从构造函数反推的,可能不准确(例如obj.constructor = null或重写了constructor) - 只对通过构造函数创建、且未篡改
constructor的普通对象才大概率一致
查看内置对象的典型原型链
常见类型原型链示例(简化版):
-
{}(空对象)→Object.prototype→null -
[](数组)→Array.prototype→Object.prototype→null -
/regex/→RegExp.prototype→Object.prototype→null -
new Date()→Date.prototype→Object.prototype→null
所有引用类型最终都继承自 Object.prototype,这是绝大多数方法(如 toString、hasOwnProperty)的源头。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










