最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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会影响所有对象(不推荐,破坏环境稳定性)
相关文章
- 魔神英雄传手游官网在哪下载 最新官方下载安装地址 07-11
- 魔神英雄传手游好玩吗 魔神英雄传手游玩法简述 07-11
- 《云之国》肉鸽模式初战记录 07-11
- 伊莫图鉴如何分享 07-11
- 风之痕迹骑士勋章材料如何获得 07-11
- 明日方舟终末地怎样实现干员养成与配队选择 07-11