所有 javascript 对象最终都指向 object.prototype,因为它是原型链的根节点,每个对象的 [[prototype]] 链最终终止于此,其 proto 为 null;object.prototype 提供 tostring() 等共享方法,仅 object.create(null) 例外。

所有 JavaScript 对象最终都指向 Object.prototype,是因为它是整个原型链的“根节点”——就像一棵树的主干底部,所有分支最终都连到这里。
Object.prototype 是原型链的终点
每个对象(包括函数、数组、日期等)在创建时,其内部 [[Prototype]](可通过 __proto__ 或 Object.getPrototypeOf() 访问)会逐级向上链接,最终停在 Object.prototype。它的 __proto__ 值是 null,表示查找终止。
-
const obj = {};→obj.__proto__ === Object.prototype -
const arr = [];→arr.__proto__ === Array.prototype,而Array.prototype.__proto__ === Object.prototype -
function fn() {}→fn.__proto__ === Function.prototype,而Function.prototype.__proto__ === Object.prototype
共享基础方法的源头
Object.prototype 上定义了所有对象都能用的方法,比如 toString()、valueOf()、hasOwnProperty()。这些方法之所以“无处不在”,正是因为所有对象都通过原型链继承自它。
-
({}).toString()不是对象自己写的,而是从Object.prototype.toString沿链找到的 -
[1,2].hasOwnProperty('length')同样来自Object.prototype,不是数组自己实现的
为什么不能绕过它?
JavaScript 引擎强制规定:任何通过字面量、构造函数或 Object.create() 创建的对象,只要没显式切断链路,其原型链最终都会抵达 Object.prototype。
-
Object.create(null)是唯一例外——它直接以null为原型,不继承Object.prototype的任何方法 - 普通对象如
{}、new Date()、/regex/都隐式连接到它,这是语言设计的统一基底
验证方式很简单
你可以用几行代码确认任意对象是否连到它:
-
Object.getPrototypeOf({}) === Object.prototype→ true -
Object.getPrototypeOf(Object.getPrototypeOf([])) === Object.prototype→ true -
Object.getPrototypeOf(Function.prototype) === Object.prototype→ true
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











