Функции-фабрики и функции-конструкторы в JavaScript
Создавать объекты по одному — это ошибка.
Если вы вручную создаете объект для каждого пользователя или одноклассника, вы дублируете код. Если у вас 100 пользователей, вам придется писать одну и ту же логику 100 раз. Это приводит к ошибкам. Вы можете случайно изменить свойство позже и сломать свое приложение.
Вместо этого используйте два следующих паттерна, чтобы писать чистый код.
- Функции-фабрики
Представьте настоящий завод. На вход поступает сырье, на выходе получается готовый продукт.
Функция-фабрика принимает параметры и возвращает новый объект.
Пример:
function classFactory(name) {
return {
reply() {
return `${name} is present`
}
}
}
Преимущества:
- Вы пишете логику один раз.
- Вы повторно используете функцию для каждого нового объекта.
- Данные остаются в безопасности. Имя остается внутри области видимости функции. Вы не сможете случайно перезаписать его извне.
- Функции-конструкторы
Функции-конструкторы также создают объекты. Они используют ключевое слово "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