توابع کارخانه‌ای (Factory Functions) و توابع سازنده (Constructor Functions) در جاوااسکریپت

ساختن اشیاء یکی یکی، یک اشتباه است.

اگر ۱۰۰ هم‌کلاسی داشته باشید و نیاز باشد برای هر کدام یک شیء بسازید، نوشتن تک‌تک اشیاء منجر به بروز مشکل می‌شود. شما منطق خود را بیش از حد تکرار می‌کنید و همچنین با خطر باگ مواجه می‌شوید. برای مثال، ممکن است بعداً در کد خود، نام یک ویژگی (property) را به طور تصادفی بازنویسی کنید.

شما به روش بهتری برای استفاده مجدد از منطق خود نیاز دارید.

توابع کارخانه‌ای (Factory Functions)

به یک کارخانه فکر کنید. شما مواد اولیه را وارد می‌کنید و یک محصول نهایی تحویل می‌گیرید. یک تابع کارخانه‌ای نیز همین کار را انجام می‌دهد. این تابع پارامترها را می‌گیرد و یک شیء جدید را برمی‌گرداند.

مثال:

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

این رویکرد باعث می‌شود نام (name) ایمن بماند. شما نمی‌توانید به طور تصادفی نام را تغییر دهید زیرا نام در محدوده (scope) تابع باقی می‌ماند. شما منطق را یک بار می‌نویسید و بارها از آن استفاده می‌کنید.

توابع سازنده (Constructor Functions)

توابع سازنده نیز اشیاء را ایجاد می‌کنند. آن‌ها از کلمه کلیدی this و کلمه کلیدی new استفاده می‌کنند. طبق قرارداد، نام این توابع با حرف بزرگ شروع می‌شود.

مثال:

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

وقتی از کلمه کلیدی new استفاده می‌کنید، جاوااسکریپت کار را برای شما انجام می‌دهد. این کلمه یک شیء جدید ایجاد می‌کند، آن را به 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