JavaScript 中的工厂函数与构造函数
一个一个地创建对象是一个错误。
如果你为每个用户或同学都手动编写一个对象,你就会重复编写代码。如果你有 100 个用户,你就得写 100 次相同的逻辑。这会导致 Bug。你可能会在以后不小心修改了某个属性,从而导致应用程序崩溃。
相反,请使用以下两种模式来编写整洁的代码。
- 工厂函数 (Factory Functions)
想象一个真实的工厂。原材料进去,成品出来。
工厂函数接收参数并返回一个新对象。
示例:
function classFactory(name) {
return {
reply() {
return ${name} is present
}
}
}
优势:
- 你只需编写一次逻辑。
- 你可以为每个新对象复用该函数。
- 数据保持安全。
name留在函数作用域内。你无法从外部意外地覆盖它。
- 构造函数 (Constructor Functions)
构造函数也可以创建对象。它们使用 new 关键字和 this 关键字。按照惯例,这些函数的名称首字母要大写。
示例:
function Classmate(name) {
this.name = name
this.reply = function() {
return ${this.name} is present
}
}
当你使用 new 时,JavaScript 会为你完成工作:
- 它会创建一个新对象。
- 它会将该对象赋值给
this。 - 它会自动返回该对象。
你不需要使用 return 语句。
扩展你的代码
你可以将这些模式与数组结合使用,以处理大量数据。与其逐个输入每个名字,不如使用 map 函数。
示例: const names = ['Kali', 'Andrew', 'Pearl', 'Percy'] const classmates = names.map(name => new Classmate(name))
现在你就有了一组可以随时使用的对象列表。
总结:
- 避免手动创建对象以防止重复。
- 使用工厂函数来封装逻辑并保护数据。
- 使用构造函数来利用
new关键字实现自动对象创建。 - 始终编写一次逻辑,并在各处复用。
来源:https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb