JavaScript में Factory Functions और Constructor Functions
एक-एक करके ऑब्जेक्ट्स बनाना एक गलती है।
यदि आपके पास 100 सहपाठी (classmates) हैं और आपको प्रत्येक के लिए एक ऑब्जेक्ट बनाने की आवश्यकता है, तो अलग-अलग ऑब्जेक्ट लिखना समस्याओं का कारण बनता है। आप अपने लॉजिक को बहुत बार दोहराते हैं। इससे बग्स (bugs) का जोखिम भी बढ़ जाता है। उदाहरण के लिए, आप बाद में अपने कोड में गलती से किसी प्रॉपर्टी का नाम ओवरराइट (overwrite) कर सकते हैं।
आपको लॉजिक को दोबारा उपयोग (reuse) करने के लिए एक बेहतर तरीके की आवश्यकता है।
Factory Functions एक फैक्ट्री के बारे में सोचें। आप उसमें कच्चा माल डालते हैं और आपको एक तैयार उत्पाद मिलता है। एक factory function भी ऐसा ही करता है। यह पैरामीटर्स लेता है और एक नया ऑब्जेक्ट रिटर्न करता है।
Example:
function classFactory(name) {
return {
reply() {
return `${name} is present`
}
}
}
यह दृष्टिकोण नाम को सुरक्षित रखता है। आप गलती से नाम नहीं बदल सकते क्योंकि यह फंक्शन स्कोप (function scope) के अंदर रहता है। आप लॉजिक को एक बार लिखते हैं और इसे कई बार उपयोग करते हैं।
Constructor Functions
Constructor functions भी ऑब्जेक्ट्स बनाते हैं। वे this कीवर्ड और new कीवर्ड का उपयोग करते हैं। परंपरा के अनुसार, ये फंक्शन कैपिटल लेटर (capital letter) से शुरू होते हैं।
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()))
यह आपके कोड को साफ (clean) और स्केलेबल (scalable) बनाता है।
मुख्य लक्ष्य सरल है:
- अपना लॉजिक एक बार लिखें।
- इसे हर जगह दोबारा उपयोग करें।
- दोहराव से बचें।
Source: https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb