פונקציות מפעל (Factory Functions) ופונקציות בנאי (Constructor Functions) ב-JavaScript
יצירת אובייקטים אחד אחד היא טעות.
אם תכתבו אובייקט ידני עבור כל משתמש או חבר לכיתה, אתם חוזרים על קוד. אם יש לכם 100 משתמשים, אתם כותבים את אותה לוגיקה 100 פעמים. זה מוביל לבאגים. אתם עלולים לשנות בטעות מאפיין (property) מאוחר יותר ולשבור את האפליקציה שלכם.
השתמשו בשתי התבניות (patterns) הללו במקום זאת כדי לכתוב קוד נקי.
- פונקציות מפעל (Factory Functions)
חשבו על מפעל אמיתי. חומרי גלם נכנסים פנימה. מוצר מוגמר יוצא החוצה.
פונקציית מפעל מקבלת פרמטרים ומחזירה אובייקט חדש.
דוגמה:
function classFactory(name) {
return {
reply() {
return `${name} is present`
}
}
}
היתרונות:
- אתם כותבים את הלוגיקה פעם אחת.
- אתם משתמשים מחדש בפונקציה עבור כל אובייקט חדש.
- הנתונים נשארים בטוחים. השם נשאר בתוך הטווח (scope) של הפונקציה. לא ניתן לדרוס אותו בטעות מבחוץ.
- פונקציות בנאי (Constructor Functions)
גם פונקציות בנאי יוצרות אובייקטים. הן משתמשות במילת המפתח "new" ובמילת המפתח "this". כמקובל, מתחילים אותן באות גדולה.
דוגמה:
function Classmate(name) {
this.name = name
this.reply = function() {
return `${this.name} is present`
}
}
כשאתם משתמשים ב-"new", JavaScript עושה את העבודה עבורכם:
- היא יוצרת אובייקט חדש.
- היא מקצה אותו ל-"this".
- היא מחזירה את האובייקט באופן אוטומטי.
אין צורך בשורת "return".
הרחבת הקוד שלכם
אתם יכולים לשלב את התבניות הללו עם מערכים (arrays) כדי לטפל בכמויות גדולות של נתונים. במקום להקליד כל שם, השתמשו בפונקציית map.
דוגמה:
const names = ['Kali', 'Andrew', 'Pearl', 'Percy']
const classmates = names.map(name => new Classmate(name))
עכשיו יש לכם רשימה של אובייקטים מוכנים לשימוש.
סיכום:
- הימנעו מיצירת אובייקטים ידנית כדי למנוע חזרתיות.
- השתמשו ב-Factory Functions כדי לארוז (encapsulate) לוגיקה ולהגן על נתונים.
- השתמשו ב-Constructor Functions כדי לנצל את מילת המפתח "new" ליצירה אוטומטית של אובייקטים.
- תמיד כתבו את הלוגיקה שלכם פעם אחת והשתמשו בה מחדש בכל מקום.
מקור: https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb