所有普通对象默认继承自 `Object.prototype`,这意味着它们自动拥有 `toString()`、`hasOwnProperty()`、`isPrototypeOf()` 等一系列通用方法——无需手动挂载,天生就能用。 换句话说,只要一个对象没被刻意切断原型链——比如用 Object.c
JavaScript对象继承自Object.prototype的含义
作者:技术拾光
时间:2026-06-17
浏览:523
文章目录
所有普通对象默认继承自 `Object.prototype`,这意味着它们自动拥有 `toString()`、`hasOwnProperty()`、`isPrototypeOf()` 等一系列通用方法——无需手动挂载,天生就能用。

换句话说,只要一个对象没被刻意切断原型链——比如用 Object.create(null) 创建——它就能直接从 Object.prototype 这个“公共池”中调用基础方法。这到底意味着什么?下面来详细解读。
继承带来统一的基础能力
Object.prototype 是绝大多数对象原型链的终点,也是 JavaScript 提供基础行为的默认资料库。基础方法包括:
- toString():把对象转成字符串,例如
{a:1}.toString()返回"[object Object]"。 - hasOwnProperty(prop):判断某个属性是否是对象自身的属性(而非从原型链继承而来)。
- isPrototypeOf(obj):检查当前对象是否是另一个对象的原型。
- valueOf() 和 toLocaleString():提供值的原始表示和本地化的字符串形式。
原型链查找机制在起作用
当你写 obj.toString() 时,JavaScript 并不会直接在 obj 自身查找该方法。它会按原型链逐层搜索:
- 第一步,查找
obj自身是否有toString属性。 - 没有?则查找
obj.__proto__(即Object.prototype)。 - 找到后,执行
Object.prototype.toString。
这条查找路径就是原型链查找机制,而 Object.prototype 是整条链上最靠前端、最稳定的那一环。
构造函数创建的对象也遵循这一规则
用 function Person() {} 创建实例时,new Person() 的 __proto__ 指向 Person.prototype,而 Person.prototype 的 __proto__ 又指向 Object.prototype。因此,即使不在 Person.prototype 上定义任何方法,实例照样能调用 toString() 或 hasOwnProperty()——全凭这条链传递下来。
可以被覆盖或切断,但需谨慎
虽然继承自 Object.prototype 是默认的,但你完全可以主动干预:
- 用
Object.create(null)创建“无原型”对象——它连toString都没有,调用时会报错。 - 在实例或原型上定义同名方法(比如
toString),会遮蔽Object.prototype上的版本。 - 直接改写
Object.prototype.toString会影响所有对象——不推荐这样做,会破坏环境的稳定性。
因此,默认继承是便利的,但修改时务必想清楚后果。
实用工具推荐
电子包浆
使用 ›绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
图片压缩
使用 ›选择画质和输出格式,预览压缩前后的大小。