知易通
第二套高阶模板 · 更大气的阅读体验

对象创建的几种方式:从日常开发说起

发布时间:2025-12-15 14:50:38 阅读:285 次

写代码的时候,对象几乎无处不在。不管是处理用户信息,还是封装一组操作逻辑,我们都会用到对象。但你有没有想过,创建一个对象其实有好几种方式?不同的场景下,选择合适的方法能让代码更清晰、更高效。

构造函数方式

这是最常见的一种方式。比如你要做一个电商系统里的商品管理,可以定义一个构造函数来生成商品对象:

function Product(name, price) {
  this.name = name;
  this.price = price;
  this.discount = function() {
    return this.price * 0.9;
  };
}

const apple = new Product('苹果', 10);
console.log(apple.discount()); // 输出 9

每次用 new 关键字调用,就能得到一个独立的商品实例。适合需要复用结构和方法的场景。

对象字面量

如果只是临时用一下,比如配置项或者传参,直接写个字面量最省事。就像你点外卖时选配送时间,可能就简单写个选项对象:

const deliveryOption = {
  time: '18:30',
  remark: '放门口,别打电话',
  urgent: true
};

sendOrder(deliveryOption);

这种方式简洁明了,不需要重复生成多个实例,适合一次性使用的数据结构。

工厂函数

有时候你不想要 new,又希望封装创建逻辑。这时候工厂函数就很自然。比如你要根据不同类型生成用户对象:

function createUser(type, name) {
  if (type === 'admin') {
    return {
      name: name,
      role: 'admin',
      accessLevel: 9
    };
  } else {
    return {
      name: name,
      role: 'user',
      accessLevel: 1
    };
  }
}

const admin = createUser('admin', '张三');

不用管是不是用了 new,返回的就是一个对象,逻辑集中,扩展也方便。

ES6 Class 创建

现在很多人习惯用 class 写法,看起来更像传统面向对象语言。比如做个订单类:

class Order {
  constructor(id, amount) {
    this.id = id;
    this.amount = amount;
  }

  pay() {
    console.log(`订单 ${this.id} 支付成功,金额 ${this.amount}`);
  }
}

const order = new Order('O001', 299);
order.pay();

虽然底层还是基于原型,但语法更清晰,尤其团队协作时,更容易理解意图。

Object.create()

这个方式不太常用,但在某些需要明确指定原型的场景特别有用。比如你想让某个对象继承一套默认配置:

const defaultConfig = {
  theme: 'light',
  autoSave: true
};

const userConfig = Object.create(defaultConfig);
userConfig.theme = 'dark'; // 覆盖默认值

console.log(userConfig.autoSave); // true,来自原型

这样既保留了默认行为,又能灵活覆盖,适合做配置继承或原型链控制。

每种方式都有它的位置。构造函数适合复杂实例,字面量适合简单数据,工厂函数适合多态逻辑,class 更适合大型项目结构,而 Object.create() 则在需要精细控制原型时派上用场。实际开发中,往往是混合使用,看哪个更顺手、更符合当前需求。