object.prototype 是所有普通对象原型链的终点,因其[[prototype]]值为null;它提供tostring()等基础方法,几乎所有内置对象都继承自它,仅object.create(null)创建的对象例外。

Object.prototype 是所有普通对象原型链的终点,因为它自身没有原型——它的 [[Prototype]] 内部属性值为 null。这不是人为设定的“默认值”,而是 JavaScript 规范定义的继承边界。
为什么 Object.prototype 是终点
每个对象在创建时都会被赋予一个隐式原型链接([[Prototype]]),这个链接指向它的“父级”原型对象。但必须有终止点,否则查找会无限递归。规范规定:
-
Object.prototype的[[Prototype]]明确为 null -
null不是对象,没有属性、方法,也不支持进一步委托 - 当属性查找抵达
Object.prototype仍没找到,就直接返回 undefined,不再继续
怎么验证它是终点
可以用标准 API 直接检查:
-
Object.getPrototypeOf(Object.prototype) === null→ true -
Object.prototype.__proto__ === null→ true(虽然__proto__已不推荐,但在此处直观) -
{}.constructor.prototype === Object.prototype→ true(字面量对象的构造器是Object)
它不是“空无一物”,而是有基础能力
作为终点,它不意味着什么都没有,恰恰相反,它提供了所有对象共用的基础方法:
-
toString()、valueOf()、hasOwnProperty()、isPrototypeOf()等都定义在Object.prototype上 - 所以哪怕一个空对象
{}也能调用{}.toString()—— 这个方法是从Object.prototype委托来的 - 这些方法不会被覆盖或丢失,除非显式删除(不建议)
其他对象也最终连到它
不只是 {},几乎所有内置对象的原型链都会经过 Object.prototype:
-
[]→Array.prototype→Object.prototype→null -
/reg/→RegExp.prototype→Object.prototype→null -
new Date()→Date.prototype→Object.prototype→null
只有极少数例外,比如 Object.create(null) 创建的对象,其 [[Prototype]] 直接为 null,跳过了 Object.prototype,因此也不具备上述基础方法。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











