دوال المصنع (Factory Functions) ودوال البناء (Constructor Functions) في JavaScript
إنشاء الكائنات (objects) واحدًا تلو الآخر هو خطأ.
إذا قمت بكتابة كائن يدويًا لكل مستخدم أو زميل دراسة، فستقوم بتكرار الكود. إذا كان لديك 100 مستخدم، فستكتب نفس المنطق 100 مرة. يؤدي هذا إلى حدوث أخطاء (bugs). قد تقوم بتغيير خاصية (property) عن طريق الخطأ لاحقًا مما يؤدي إلى تعطل تطبيقك.
استخدم هذين النمطين بدلاً من ذلك لكتابة كود نظيف.
- Factory Functions
تخيل مصنعًا حقيقيًا. تدخل المواد الخام، ويخرج منتج نهائي.
تأخذ الـ factory function المعاملات (parameters) وتُرجع كائنًا جديدًا.
Example:
function classFactory(name) {
return {
reply() {
return `${name} is present`
}
}
}
المزايا:
- تكتب المنطق مرة واحدة فقط.
- تعيد استخدام الدالة لكل كائن جديد.
- تظل البيانات آمنة؛ حيث يظل الاسم داخل نطاق الدالة (function scope)، ولا يمكنك الكتابة فوقه عن طريق الخطأ من الخارج.
- Constructor Functions
تقوم الـ constructor functions أيضًا بإنشاء الكائنات. وهي تستخدم الكلمة المفتاحية "new" والكلمة المفتاحية "this". ومن المتعارف عليه أن تبدأ هذه الدوال بحرف كبير (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) للتعامل مع كميات كبيرة من البيانات. بدلاً من كتابة كل اسم، استخدم دالة map.
Example:
const names = ['Kali', 'Andrew', 'Pearl', 'Percy']
const classmates = names.map(name => new Classmate(name))
الآن لديك قائمة من الكائنات الجاهزة للاستخدام.
Summary:
- تجنب إنشاء الكائنات يدويًا لمنع التكرار.
- استخدم Factory Functions لتغليف المنطق وحماية البيانات.
- استخدم Constructor Functions للاستفادة من الكلمة المفتاحية "new" لإنشاء الكائنات تلقائيًا.
- اكتب منطقك دائمًا مرة واحدة وأعد استخدامه في كل مكان.
Source: https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb