一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

JavaScript 对象继承自 Object.prototype 意味着什么?

时间:2026-06-17 09:37:03 编辑:袖梨 来源:一聚教程网

所有普通对象默认继承Object.prototype上的通用方法,如toString()、hasOwnProperty()等,通过原型链查找机制自动获得;Object.prototype是绝大多数对象原型链终点,提供基础行为,但可被覆盖或切断。

这意味着所有普通对象默认拥有 Object.prototype 上定义的通用方法,比如 toString()hasOwnProperty()isPrototypeOf() 等,无需手动添加就能直接调用。

继承带来统一的基础能力

Object.prototype 是绝大多数对象原型链的终点,也是 JavaScript 提供基础行为的“公共池”。只要一个对象没被刻意切断原型链(比如用 Object.create(null) 创建),它就自动能用这些方法:

  • 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 是这条链上最靠前、最稳定的一环。

立即学习“Java免费学习笔记(深入)”;

构造函数创建的对象也遵循这一规则

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 会影响所有对象(不推荐,破坏环境稳定性)

热门栏目