📜  javascript 构造函数与工厂函数 - Javascript (1)

📅  最后修改于: 2023-12-03 15:01:44.843000             🧑  作者: Mango

JavaScript 构造函数与工厂函数

在 JavaScript 中,构造函数和工厂函数是两种创建对象的方式。本文将介绍它们的概念、区别、用法以及如何选择使用哪种。

构造函数
概念

构造函数是一种特殊的函数,用于创建对象。它定义了一个对象的属性和方法,然后使用 new 关键字实例化新的对象。在实例化时,构造函数内部的 this 指向新创建的对象。

示例
function Person(name, age) {
  this.name = name;
  this.age = age;
}

const john = new Person('John', 30);

console.log(john.name); // 'John'
console.log(john.age); // 30
用法

通过构造函数创建对象的好处是可以方便地创建多个拥有相同属性和方法的对象。

注意点
  • 构造函数的名称应该以大写字母开头。
  • 如果在构造函数中使用了 return 语句且返回值是一个对象,则返回的对象会覆盖新创建的对象,即不会创建新的对象。
工厂函数
概念

工厂函数是一种创建对象的函数,它在内部创建一个新的对象,给对象设置属性和方法后返回该对象。在使用时可以多次调用该函数创建多个对象。

示例
function createPerson(name, age) {
  return {
    name,
    age,
    sayHi() {
      console.log(`Hi, my name is ${this.name} and I'm ${this.age} years old.`);
    }
  }
}

const john = createPerson('John', 30);
const mary = createPerson('Mary', 25);

john.sayHi(); // 'Hi, my name is John and I'm 30 years old.'
mary.sayHi(); // 'Hi, my name is Mary and I'm 25 years old.'
用法

通过工厂函数创建对象的好处是可以在函数中封装更多的逻辑,保证对象的属性和方法是正确的。

注意点
  • 工厂函数返回的对象不是真正的类,因此它无法通过 instanceof 操作符检测类型。
  • 每次调用工厂函数都会创建一个新的对象,因此会带来一定的性能问题。
如何选择

构造函数和工厂函数都有它们的优点和缺点。在选择使用哪种时,应该考虑到具体场景和需求。

使用构造函数的场景:

  • 需要创建多个对象,并且这些对象拥有相同的属性和方法。
  • 需要实现继承。

使用工厂函数的场景:

  • 需要封装更多的逻辑,保证对象的属性和方法是正确的。
  • 创建的对象是轻量级的,不需要继承和重用。
总结

本文介绍了 JavaScript 中的构造函数和工厂函数,并且分析了它们各自的概念、区别、用法以及如何选择使用哪种。在实际工作中应该根据实际需求选择合适的对象创建方式。