字面量创建速度比构造函数快2–5倍,但差异仅纳秒级,实际影响可忽略;性能关键在于创建后如何使用,而非创建方式本身。

对象字面量创建速度明显快于构造函数,但这种差异在绝大多数实际场景中可以忽略;真正影响性能的不是“怎么创建”,而是“创建后怎么用”。
字面量:一步到位,无执行开销
写 {} 或 { name: 'Alice', age: 30 },引擎直接分配内存、初始化属性,不涉及函数调用、this 绑定、原型链设置等步骤。它本质上是语法糖,等价于隐式调用 new Object(),但省去了构造函数调用栈和上下文切换成本。
- 适合配置项、API 响应数据、临时 DTO、UI 状态片段等一次性结构
- 方法写在字面量内部(如
say() { ... })时,每个对象都独占一份函数,内存不共享 - 天然兼容 JSON,
JSON.stringify()可完整序列化
构造函数:多步执行,有初始化成本
每次 new Person('Alice', 30) 都要经历四步:创建空对象 → 绑定 [[Prototype]] → 执行函数体(含 this 绑定)→ 返回实例。若函数体内定义方法(如 this.say = function() {...}),还会为每个实例重复创建函数对象,显著增加内存压力。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 方法挂到
Person.prototype上可共享,节省内存,但首次访问需沿原型链查找(现代引擎已高度优化,延迟可忽略) - 支持参数校验、默认值填充、副作用初始化(如日志、缓存注册),但同步 heavy 操作(如深克隆、正则预编译)才是真实瓶颈
- 漏写
new会导致this指向错误,严格模式下报错,非严格模式污染全局
性能差距到底有多大?
基准测试显示,字面量比构造函数快约 2–5 倍,但单位是纳秒级。创建一万个对象,总耗时差通常不到 0.1 毫秒——远低于一次 DOM 重排或网络请求的开销。
立即学习“Java免费学习笔记(深入)”;
- 真正拖慢应用的,往往是大量字面量重复定义相同函数,或构造函数内做同步耗时操作
- 频繁创建又立即丢弃对象会加重 GC 压力,但这与创建方式无关,而与生命周期管理有关
- 滥用超长原型链(如层层
Object.create嵌套)会导致属性访问变慢,而非构造函数本身的问题
选哪个,关键看用途,不是看快慢
不需要多个实例、不关心类型识别、不复用行为 → 用字面量。需要批量生成、共享方法、支持 instanceof、预留继承扩展空间 → 用构造函数或 class。两者不是性能竞赛,而是语义分工。
- 配置、响应数据、临时容器 → 字面量优先
- 用户、订单、渲染器、事件处理器等实体类 → 构造函数或 class 更合适
- 想兼顾参数化和安全性?工厂函数(返回字面量)是轻量折中方案


















