JavaScriptలో Factory Functions మరియు Constructor Functions

వస్తువులను (objects) ఒక్కొక్కటిగా సృష్టించడం ఒక తప్పు.

మీకు 100 మంది తోటి విద్యార్థులు ఉండి, ప్రతి ఒక్కరి కోసం ఒక ఆబ్జెక్ట్‌ను సృష్టించాల్సి వస్తే, విడివిడిగా ఆబ్జెక్ట్‌లను రాయడం వల్ల సమస్యలు వస్తాయి. మీరు మీ లాజిక్‌ను చాలాసార్లు పునరావృతం చేయాల్సి వస్తుంది. దీనివల్ల బగ్స్ (bugs) వచ్చే ప్రమాదం కూడా ఉంది. ఉదాహరణకు, మీ కోడ్‌లో తర్వాత పొరపాటున ఒక ప్రాపర్టీ పేరును ఓవర్‌రైట్ (overwrite) చేసే అవకాశం ఉంది.

లాజిక్‌ను తిరిగి ఉపయోగించుకోవడానికి (reuse) మీకు ఒక మెరుగైన మార్గం అవసరం.

Factory Functions ఒక ఫ్యాక్టరీ గురించి ఆలోచించండి. మీరు ముడి పదార్థాలను (raw materials) ఇస్తారు మరియు ఒక తయారైన ఉత్పత్తిని పొందుతారు. ఒక factory function కూడా అదే చేస్తుంది. ఇది పారామీటర్లను (parameters) తీసుకుని ఒక కొత్త ఆబ్జెక్ట్‌ను రిటర్న్ చేస్తుంది.

Example:

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

ఈ విధానం పేరును సురక్షితంగా ఉంచుతుంది. పేరు ఫంక్షన్ స్కోప్ (function scope) లోపల ఉండటం వల్ల మీరు పొరపాటున దానిని మార్చలేరు. మీరు లాజిక్‌ను ఒక్కసారి రాసి, దానిని చాలాసార్లు ఉపయోగించుకోవచ్చు.

Constructor Functions Constructor functions కూడా ఆబ్జెక్ట్‌లను సృష్టిస్తాయి. ఇవి this కీవర్డ్ మరియు new కీవర్డ్‌లను ఉపయోగిస్తాయి. సాధారణంగా (convention), ఈ ఫంక్షన్లు క్యాపిటల్ లెటర్‌తో మొదలవుతాయి.

Example:

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

మీరు new కీవర్డ్‌ను ఉపయోగించినప్పుడు, JavaScript మీ కోసం పని చేస్తుంది. ఇది ఒక కొత్త ఆబ్జెక్ట్‌ను సృష్టించి, దానిని this కి కేటాయించి, ఆటోమేటిక్‌గా రిటర్న్ చేస్తుంది. మీకు return స్టేట్‌మెంట్ అవసరం లేదు.

Scaling your code పెద్ద మొత్తంలో డేటాను హ్యాండిల్ చేయడానికి మీరు ఈ పద్ధతులను అర్రేలతో (arrays) కలిపి ఉపయోగించవచ్చు.

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

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

ఇది మీ కోడ్‌ను క్లీన్‌గా మరియు స్కేలబుల్‌గా (scalable) చేస్తుంది.

దీని ప్రధాన లక్ష్యం సరళమైనది:

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