javascript中reflect无获取原型链长度的api,需用reflect.getprototypeof()手动遍历计数:从对象开始逐级取原型直至null,统计步数(不含null),如{}返回1、[]返回2,object.create(null)返回0。

JavaScript 中 Reflect 本身不提供直接获取原型链长度的方法。它没有类似 Reflect.getPrototypeLength() 这样的 API。要获取原型链长度,需手动遍历原型链并计数。
用 Object.getPrototypeOf() 遍历计数
这是最常用、最可靠的方式:从目标对象开始,逐级调用 Object.getPrototypeOf(),直到返回 null,每走一步计数加一。
- 注意:原型链长度 = 从目标对象到
Object.prototype的“继承步数”,通常不包含null(即Object.prototype的原型) -
Reflect.getPrototypeOf(obj)和Object.getPrototypeOf(obj)功能完全一致,可互换使用 - 示例:普通对象的原型链长度通常是 2(自身 →
Object.prototype→null),计数时一般只算到Object.prototype这一层
常见实现方式(含 Reflect)
你可以用 Reflect.getPrototypeOf 替代 Object.getPrototypeOf 来写,语义更统一:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
function getPrototypeChainLength(obj) {
if (obj == null) return 0;
let length = 0;
let current = obj;
while ((current = Reflect.getPrototypeOf(current)) !== null) {
length++;
}
return length;
}
例如:getPrototypeChainLength({}) 返回 1(只经过 Object.prototype);getPrototypeChainLength([]) 返回 2(Array.prototype → Object.prototype)。
注意边界情况
某些对象原型链特殊,会影响结果:
-
Object.create(null)创建的对象没有原型,返回 0 - 函数对象的原型链包含
Function.prototype→Object.prototype,长度为 2 - 自定义类继承会延长链长,如
class B extends A的实例,链长至少为 3(实例 →B.prototype→A.prototype→Object.prototype)
为什么不推荐用 __proto__?
__proto__ 是非标准旧属性,已被 Object.getPrototypeOf() 和 Reflect.getPrototypeOf() 取代。它在严格模式下可能报错,且语义不清晰,应避免使用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










