JavaScript原型链无深度限制,本质是Object.getPrototypeOf()构成的引用链,终点为null;引擎不限制层数,性能瓶颈在于内存与访问效率,而非语法或硬性约束。

JavaScript 原型继承链没有深度限制。
原型链本质是一条由 Object.getPrototypeOf() 逐级向上链接的引用链,终点是 null。它不是数组,不带 length 属性,也不受引擎硬性层数约束。V8、SpiderMonkey、JavaScriptCore 等主流引擎均未设置最大原型层数——只要你内存够,就能构造出千层、万层的原型链。
-
Object.create(null)创建的对象链长为 1(直接指向null) - 普通对象如
{}链长通常为 2(自身 →Object.prototype→null) - 手动用
Object.create(parent)循环嵌套,可轻松达到数百甚至上千层,引擎不会报错
查找性能在百层内依然高效;超过千层后,属性访问延迟会线性上升,但仍是可用的——瓶颈不在语法或引擎限制,而在内存占用与实际运行效率。
真正有硬性限制的是递归调用栈,不是原型链本身。比如你在遍历原型链时写了个递归函数,那可能触发 RangeError: Maximum call stack size exceeded,但这错来自递归深度,而非原型链“太长”。
立即学习“Java免费学习笔记(深入)”;
所以关键区别要拎清:
- 原型链长度是逻辑结构问题,靠手动遍历计数,无上限
- 递归深度是物理资源问题,受调用栈容量制约(Chrome 约 13500 层,Firefox 约 7000 层,Safari 约 25000 层)
如果业务中真遇到深层原型链,建议优先用循环代替递归遍历,避免栈溢出风险。


















