دوال المُنشئ
أنشئوا كائنات ذات حالة خاصة عبر الإغلاقات.
دوال المُنشئ درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 4 دروس في المجموع.
ما دالة المصنع
دالة المصنع هي أي دالة تُعيد كائنًا جديدًا. وعلى خلاف المُنشئ، تستدعونها بالطريقة المعتادة (من دون new)، ويمكنها استخدام الإغلاقات للحفاظ على حالة خاصة.
function createUser(name) {
return {
name,
greet: () => "Hi, I am " + name
};
}
const u = createUser("Ada");
console.log(u.greet()); // "Hi, I am Ada"من دون الكلمة المفتاحية new
تتجنب المصانع مشكلات new وthis. ما عليكم سوى استدعاء الدالة للحصول على كائن.
function point(x, y) {
return { x, y };
}
const p = point(3, 4);
console.log(p.x, p.y); // 3 4حالة خاصة عبر الإغلاق
المتغيرات المعرّفة في المصنع خاصة. وتغلق طرائق الكائن المُعاد عليها، تمامًا كما في نمط الوحدات، لكن مع إنتاج مثيلات متعددة.
function createCounter() {
let count = 0; // private
return {
inc: () => ++count,
get: () => count
};
}
const c = createCounter();
c.inc();
console.log(c.get()); // 1مثيلات مستقلة متعددة
ينتج كل استدعاء للمصنع كائنًا جديدًا بحالة خاصة مستقلة. وهذا هو الفرق الأساسي عن وحدة ذات مثيل مفرد.
function createCounter() {
let n = 0;
return { inc: () => ++n };
}
const a = createCounter();
const b = createCounter();
console.log(a.inc(), a.inc()); // 1 2
console.log(b.inc()); // 1الخصائص المحسوبة
يمكن للمصانع اشتقاق القيم وقت الإنشاء وعرض طرائق محسوبة، مع إبقاء المدخلات خاصة.
function rectangle(w, h) {
return {
area: () => w * h,
perimeter: () => 2 * (w + h)
};
}
const r = rectangle(3, 4);
console.log(r.area()); // 12
console.log(r.perimeter()); // 14الإعدادات الافتراضية والاختيارية
بما أن المصانع دوال عادية، فإنها تتعامل بسلاسة مع القيم الافتراضية والخيارات باستخدام التفكيك.
function createButton({ label = "OK", disabled = false } = {}) {
return { label, disabled };
}
console.log(createButton()); // { label: "OK", disabled: false }
console.log(createButton({ label: "Go" })); // { label: "Go", disabled: false }التركيب بدلًا من التوريث
تفضّل المصانع التركيب: إذ تبنون كائنًا بدمج السلوكيات بدلًا من توسيع سلسلة من الفئات.
const canFly = (s) => ({ fly: () => s.name + " flies" });
function createBird(name) {
const self = { name };
return Object.assign(self, canFly(self));
}
console.log(createBird("Robin").fly()); // "Robin flies"السلوك المشترك
لمشاركة الطرائق بين المثيلات من دون نسخها لكل مثيل، عرّفوها مرة واحدة ثم أسندوها. أو تقبلوا الكلفة الصغيرة مقابل ميزة الخصوصية التي توفرها الإغلاقات.
const behavior = {
describe() { return "id " + this.id; }
};
function createItem(id) {
return Object.assign({ id }, behavior);
}
console.log(createItem(7).describe()); // "id 7"إعادة الدوال أيضًا
يمكن للمصنع إعادة دالة بدلًا من كائن عندما تكون هذه هي الواجهة الأنسب، مع استمرارها في التقاط الحالة الخاصة.
function multiplier(factor) {
return (n) => n * factor;
}
const triple = multiplier(3);
console.log(triple(5)); // 15المصنع مقابل المُنشئ
يستخدم المُنشئون new وthis وسلسلة النموذج الأولي. أما المصانع فأبسط، وتتجنب أخطاء this، وتوفر خصوصية حقيقية عبر الإغلاقات، مقابل عدم مشاركة الطرائق عبر نموذج أولي.
التحقق عند الإنشاء
يمكن للمصانع التحقق من المدخلات وإطلاق استثناء أو تطبيعها قبل الإعادة، مما يضمن أن كل كائن منتج صالح.
function createAge(value) {
if (value < 0) throw new Error("age must be >= 0");
return { value };
}
console.log(createAge(30).value); // 30تحقق سريع
دوال المصنع
مراجعة
تُعيد دوال المصنع كائنات من دون new أو this، وتستخدم الإغلاقات للحفاظ على حالة خاصة. ينتج كل استدعاء مثيلًا مستقلًا، ويدعم الخصائص المحسوبة، والإعدادات الافتراضية، والتركيب، والتحقق. وهي تستبدل مشاركة الطرائق عبر النموذج الأولي بالبساطة والخصوصية الحقيقية، مما يجعلها بديلًا واضحًا للمُنشئين يعتمد على الإغلاقات.
الأسئلة الشائعة
هل درس «دوال المُنشئ» مجاني؟
نعم — نص درس «دوال المُنشئ» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «دوال المُنشئ»؟
أنشئوا كائنات ذات حالة خاصة عبر الإغلاقات. تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟
لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «دوال المُنشئ»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟
نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.