javascript创建对象最常用且层层递进的三种模式是字面量、构造函数、原型链:字面量适合单次使用;构造函数解决批量创建;原型链实现方法共享以节省内存。

JavaScript 创建对象最常用也最核心的三种模式是:字面量、构造函数、原型链。它们不是并列替代关系,而是层层递进——字面量适合单次使用;构造函数解决批量创建;原型链则让多个实例共享方法,避免重复开销。
字面量方式:简洁直接,适合一次性对象
用 {} 直接定义,如 const user = { name: '张三', age: 28 }。它底层会隐式调用 new Object(),所以所有字面量对象的 __proto__ 都指向 Object.prototype。属性和方法都挂载在实例自身,不能被其他对象复用。
- 优点:写法最简,语义清晰,适合配置项、临时数据结构
- 缺点:无法批量生成结构一致的对象;每个对象的方法都是独立副本
- 注意:
user.hasOwnProperty('name')能用,是因为继承自Object.prototype
构造函数方式:统一结构,支持批量实例化
通过 function Person(name, age) { this.name = name; this.age = age; } 定义,再用 new Person('李四', 30) 创建实例。每次 new 会做四件事:创建空对象 → 绑定原型(obj.__proto__ = Person.prototype)→ 执行函数体(this 指向新对象)→ 返回该对象。
- 优点:可复用初始化逻辑,适合需要多个同类对象的场景
- 陷阱:若把方法写在函数体内(如
this.say = function(){...}),每个实例都会拥有独立方法副本,浪费内存 - 验证:
person1.say === person2.say返回false,说明不是同一函数
原型链方式:共享方法,节省内存的核心机制
把通用方法挂到构造函数的 prototype 属性上,例如 Person.prototype.say = function() { console.log('Hi, I’m ' + this.name); };。所有通过 new Person() 创建的实例,都能通过原型链访问这个方法。
- 原理:实例没有该属性时,JS 自动沿
__proto__向上查找,直到Object.prototype或null - 好处:方法只存一份,多个实例共用;符合“数据在实例、行为在原型”的合理分工
- 关键点:
Person.prototype是函数才有的属性;实例对象只有__proto__,没有prototype
组合使用更实用:构造函数 + 原型链
实际开发中,通常把实例专属数据(如 name、age)放在构造函数里初始化,把通用方法(如 say、toString)放在 prototype 上。这样既保证对象结构统一,又避免内存浪费。
- 示例:
function Car(brand, year) { this.brand = brand; this.year = year; }Car.prototype.start = function() { console.log(this.brand + ' engine started'); }; - 延伸:还可配合
Object.create()直接以某个对象为原型创建新对象,跳过构造函数,更贴近原型本质
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











