Object.getPrototypeOf() 可逐层获取原型对象直至 null,完整遍历原型链;它读取对象内部[[Prototype]]属性,返回直接原型,是标准、只读、推荐的方法。

可以通过 Object.getPrototypeOf 一层层向上获取原型对象,直到到达 null,从而完整遍历原型链。
从实例对象开始获取原型
每个对象都有一个内部属性 [[Prototype]],Object.getPrototypeOf() 就是读取这个属性的标准方式。对普通对象或构造函数实例调用它,会返回其直接原型:
- 对字面量对象(如
{})调用,返回Object.prototype - 对数组调用(如
[]),返回Array.prototype - 对函数调用,返回
Function.prototype
循环遍历直到原型链末端
原型链终点是 null,所以可以用 while 循环持续获取上一级原型:
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, null](注意 null 是最后一步赋值后退出循环的,实际链中不包含它;若需保留可微调逻辑)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
注意 constructor 与原型的关系
constructor 属性通常存在于原型上,但不是原型链查找的依据——它只是普通属性,可能被覆盖或丢失。不要依赖 obj.constructor.prototype 反推原型,而应始终使用 Object.getPrototypeOf(obj)。例如:
- 如果手动设置
obj.__proto__ = null,Object.getPrototypeOf(obj)返回null,但obj.constructor可能仍指向旧构造函数 - 类继承中子类原型的
constructor需显式修复,否则会指向父类
区分 Object.getPrototypeOf 与 __proto__
__proto__ 是非标准但广泛支持的访问器属性,而 Object.getPrototypeOf() 是 ECMAScript 标准方法,推荐优先使用后者。两者在多数情况下行为一致,但:
-
__proto__可读可写,存在篡改风险;Object.getPrototypeOf()只读且更语义清晰 - 某些环境(如严格模式下的某些引擎)可能限制
__proto__使用 - 冻结对象时,
__proto__可能不可写,但Object.getPrototypeOf()依然可用

















