JavaScript 中的工厂函数与构造函数

逐个创建对象是一个错误。

如果你有 100 个同学,并且需要为每个人创建一个对象,那么逐个编写对象会导致问题。你会重复编写太多的逻辑,而且还面临产生 Bug 的风险。例如,你可能会在代码的后续部分不小心覆盖了属性名。

你需要一种更好的方式来复用逻辑。

工厂函数 想象一下工厂。你投入原材料,然后得到成品。工厂函数也是如此。它接收参数并返回一个新对象。

示例:

function classFactory(name) {
    return {
        reply() {
            return `${name} is present`
        }
    }
}

这种方法可以保证 name 的安全。你无法意外地更改 name,因为它保留在函数作用域内。你只需编写一次逻辑,就可以多次复用。

构造函数 构造函数也可以创建对象。它们使用 this 关键字和 new 关键字。按照惯例,这些函数以大写字母开头。

示例:

function Classmate(name) {
    this.name = name
    this.reply = function() {
        return `${this.name} is present`
    }
}

当你使用 new 关键字时,JavaScript 会为你完成工作。它会创建一个新对象,将其赋值给 this,并自动将其返回。你不需要编写 return 语句。

扩展你的代码 你可以将这些方法与数组结合使用,以处理大量数据。

const names = ['Kali', 'Andrew', 'Pearl', 'Percy']
const classmates = names.map(name => new Classmate(name))

classmates.forEach(c => console.log(c.reply()))

这会让你的代码变得简洁且具有可扩展性。

主要目标很简单:

来源:https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb