object.prototype是所有普通对象的最终原型,其[[prototype]]为null,标志着原型链终止;它统一提供tostring、valueof、hasownproperty等基础方法,所有对象通过原型链继承调用,但禁止直接修改以避免全局污染。

Object.prototype 是所有普通对象的最终原型,它直接提供了 JavaScript 中最基础、最通用的方法,比如 toString()、valueOf()、hasOwnProperty()、isPrototypeOf()、propertyIsEnumerable() 等。这些方法不是每个对象自己定义的,而是通过原型链“继承”来的。
Object.prototype 是原型链的终点
几乎所有对象(包括字面量 {}、数组 []、函数 function(){})的原型链最终都会到达 Object.prototype,而它的 [[Prototype]] 是 null —— 这标志着原型链终止。
-
{}→Object.prototype→null -
[]→Array.prototype→Object.prototype→null -
function f(){}→Function.prototype→Object.prototype→null
基础方法由 Object.prototype 统一提供
这些方法被设计为通用行为,无需重复实现:
-
toString():返回[object Type]字符串,用于类型识别或默认字符串化 -
valueOf():返回对象的原始值(如日期对象返回毫秒数,包装对象返回其原始值) -
hasOwnProperty(prop):判断属性是否存在于对象自身(而非原型上),是区分实例属性与继承属性的关键 -
isPrototypeOf(obj):检查当前对象是否在obj的原型链中,例如Object.prototype.isPrototypeOf({})返回true -
propertyIsEnumerable(prop):判断某属性是否可被for...in枚举(且自身拥有)
方法能被所有对象调用,靠的是原型链查找机制
当你写 {}.toString() 或 [1,2].hasOwnProperty('length') 时,对象自身并没有这些方法。JS 引擎会按如下顺序查找:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 先查对象自身是否有该属性
- 没有 → 查
__proto__指向的原型(如Object.prototype) - 找到就执行;没找到 → 继续向上查(但
Object.prototype已是顶层,再往上就是null)
例如:const arr = [1]; arr.toString() 实际调用的是 Array.prototype.toString()(它重写了 Object.prototype.toString()),而 arr.hasOwnProperty('push') 则查到 Array.prototype 没有,最终落在 Object.prototype.hasOwnProperty 上执行。
不建议直接修改 Object.prototype
虽然技术上可以往 Object.prototype 添加方法(如 Object.prototype.myMethod = ...),但这会让**所有对象**都获得该方法,极易引发冲突或意外行为(尤其在第三方库或未来标准新增同名方法时)。生产环境应避免此类操作。
若需扩展通用能力,推荐使用工具函数、ES6 模块封装,或仅在必要时对特定构造函数的 prototype 扩展(如 String.prototype.trimStart 这类标准已采纳的方式)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










