جاري التحميل...

النماذج الأولية والوراثة

النماذج الأولية (Prototypes) والوراثة (Inheritance) هي أحد أعمدة برمجة جافاسكريبت المتقدمة، حيث تمكّن المطورين من إنشاء كائنات (Objects) قادرة على مشاركة الخصائص والأساليب بطريقة ديناميكية ومرنة. تخيل أن كل كائن في جافاسكريبت يشبه غرفة في منزل؛ النماذج الأولية هي كخطة البناء التي تحدد مميزات هذه الغرفة، والوراثة هي الطريقة التي تسمح للغرف الجديدة بمشاركة هذه المميزات مع إضافة لمساتها الخاصة.
في تطوير مواقع الأخبار، يمكنك استخدام النماذج الأولية لإنشاء كائنات تمثل مقالات ومحررين مع خصائص مشتركة وسلوكيات متكررة. في مواقع التجارة الإلكترونية، يمكن تمثيل المنتجات والفئات والمخزون باستخدام الوراثة لتقليل التكرار وزيادة الكفاءة. بالنسبة للصفحات الشخصية أو بوابات الحكومة الإلكترونية، فإن النماذج الأولية تجعل إدارة البيانات المكررة سلسة، مثل المستخدمين أو النماذج التفاعلية.
بعد إتمام هذا الدرس، سيتعلم القارئ كيفية إنشاء كائنات ذات خصائص وأساليب مشتركة، فهم سلسلة النماذج الأولية (Prototype Chain)، واستغلال الوراثة في تنظيم الكود وتحسين الأداء. سنستخدم أمثلة عملية وقابلة للتنفيذ، تشبه تنظيم مكتبة أو ترتيب غرف المنزل بحيث يمكن تطوير كل جزء دون إعادة بناء الكل من الصفر.

مثال أساسي

javascript
JAVASCRIPT Code
// إنشاء نموذج أساسي للمقال
function Article(title, author) {
this.title = title; // عنوان المقال
this.author = author; // مؤلف المقال
}
Article.prototype.showSummary = function() {
return `${this.title} كتب بواسطة ${this.author}`; // ملخص المقال
};

// إنشاء مقال جديد باستخدام الوراثة من النماذج الأولية
const newsArticle = new Article("آخر الأخبار", "محرر الموقع");
console.log(newsArticle.showSummary());

في المثال أعلاه، قمنا أولاً بإنشاء دالة منشئة (Constructor Function) باسم Article، تأخذ معاملين: title وauthor. هذه الطريقة شائعة لإنشاء كائنات جديدة في جافاسكريبت. السطر this.title = title يقوم بتعيين خاصية title لكل كائن يتم إنشاؤه من Article.
بعد ذلك، استخدمنا Article.prototype.showSummary لإضافة أسلوب (Method) لجميع الكائنات الجديدة، بحيث تشترك في نفس الوظيفة دون نسخ الكود لكل كائن على حدة. هذا يوضح مفهوم النماذج الأولية (Prototype) وسلسلة الوراثة (Prototype Chain)، حيث تبحث جافاسكريبت عن الأسلوب أولاً في الكائن نفسه، ثم في النموذج الأولي المرتبط به.
أخيراً، أنشأنا كائن newsArticle باستخدام new Article(...)، مما يجعل newsArticle يرث جميع الخصائص والأساليب المعرفة في النموذج الأولي. عند استدعاء newsArticle.showSummary()، يتم تنفيذ الأسلوب الموجود في Prototype. هذا يوضح كيفية استخدام الوراثة لتقليل التكرار وتنظيم الكود في مشاريع حقيقية مثل مواقع الأخبار أو التجارة الإلكترونية، تماماً كما نرتب غرف منزل بشكل متسلسل لتسهيل الصيانة والتوسع.

مثال عملي

javascript
JAVASCRIPT Code
// نموذج منتجات متجر إلكتروني
function Product(name, price) {
this.name = name; // اسم المنتج
this.price = price; // سعر المنتج
}
Product.prototype.showDetails = function() {
return `${this.name}: السعر ${this.price} ريال`; // تفاصيل المنتج
};

// وراثة لإنشاء فئة منتج خاص
function DigitalProduct(name, price, sizeMB) {
Product.call(this, name, price); // استدعاء منشئ المنتج الأساسي
this.sizeMB = sizeMB; // حجم الملف الرقمي
}
DigitalProduct.prototype = Object.create(Product.prototype); // ربط النموذج الأولي
DigitalProduct.prototype.constructor = DigitalProduct; // ضبط المرجع إلى المنشئ الحالي

const ebook = new DigitalProduct("كتاب إلكتروني", 30, 5);
console.log(ebook.showDetails() + `، الحجم: ${ebook.sizeMB} ميجابايت`);

في المثال العملي، بدأنا بإنشاء منشئ Product لتمثيل المنتجات العامة. ثم أضفنا أسلوب showDetails عبر النموذج الأولي، مما يتيح لكل كائن من Product عرض التفاصيل بطريقة موحدة.
بعد ذلك، أنشأنا فئة DigitalProduct لترث من Product، وهو نموذج للمنتجات الرقمية. استخدمنا Product.call(this, name, price) لتوريث الخصائص الأساسية، ثم Object.create(Product.prototype) لربط النموذج الأولي، مع ضبط المرجع constructor ليشير إلى DigitalProduct. هذه الطريقة تضمن أن الوراثة تعمل بشكل صحيح، وتسمح لكائنات DigitalProduct بالاستفادة من أساليب Product دون نسخ الكود، مما يعزز الأداء ويقلل الأخطاء.
يمكن تطبيق هذه التقنية على أي مشروع: في مواقع التجارة الإلكترونية، لإدارة المنتجات المختلفة؛ في صفحات الأخبار، لإضافة أنواع مختلفة من المقالات؛ وفي البوابات الحكومية، لإنشاء نماذج متقدمة لمستخدمين أو خدمات متنوعة. هذه الممارسات تشبه ترتيب مكتبة بحيث تكون كل الكتب في مكانها، ويمكن الوصول إليها بسهولة أو إضافة كتب جديدة دون إعادة ترتيب الكل.

أفضل الممارسات والأخطاء الشائعة:

  1. استخدام Syntax حديث: من الأفضل استخدام Object.create للوراثة بدلاً من تعديل النموذج الأولي مباشرة لتجنب التعارضات.
  2. إدارة الأخطاء: تحقق من وجود الخصائص قبل الوصول إليها لتفادي undefined errors.
  3. تحسين الأداء: إعادة استخدام الأساليب عبر النموذج الأولي يقلل من استهلاك الذاكرة.
  4. توثيق الكود: إضافة تعليقات واضحة يساعد على صيانة الكود في المشاريع الكبيرة.
    الأخطاء الشائعة:

  5. نسيان ضبط constructor عند إنشاء نموذج فرعي مما يؤدي إلى إرباك المرجع.

  6. تعديل خصائص النموذج الأولي مباشرة بدون قصد يمكن أن يؤثر على جميع الكائنات الموروثة.
  7. تجاهل استدعاء المنشئ الأساسي في الفئات الفرعية يؤدي إلى خصائص مفقودة.
  8. تسريب الذاكرة بسبب إنشاء أساليب داخل المنشئ بدل النموذج الأولي.
    نصائح التصحيح:
  • استخدم console.log وتتبع النموذج الأولي للتحقق من الوراثة.
  • تجنب نسخ الأساليب في كل كائن جديد.
  • اختبر الكود في بيئة صغيرة قبل دمجه في المشروع الكبير.

📊 مرجع سريع

Property/Method Description Example
prototype النموذج الأولي للكائنات Article.prototype.showSummary
constructor تشير إلى الدالة المنشئة للكائن newsArticle.constructor
Object.create إنشاء كائن جديد مع نموذج أولي محدد Object.create(Product.prototype)
call استدعاء منشئ مع خصائص محددة Product.call(this, name, price)
new إنشاء كائن جديد باستخدام منشئ new Article("عنوان", "مؤلف")
showSummary أسلوب يعرض ملخص المقال newsArticle.showSummary()

الملخص والخطوات التالية:
في هذا الدرس تعلمنا كيفية استخدام النماذج الأولية والوراثة لإنشاء كائنات ديناميكية ومرنة في جافاسكريبت. فهمنا أن كل كائن يمكنه مشاركة الخصائص والأساليب من نموذج أولي مشترك، ما يقلل التكرار ويحسن الأداء. تعلمنا أيضًا كيفية إنشاء فئات فرعية (Subclasses) لتمثيل كائنات متخصصة مثل المنتجات الرقمية أو المقالات المتنوعة، مع الحفاظ على بنية نظيفة ومرنة.
هذه المفاهيم ترتبط ارتباطًا وثيقًا بالتلاعب بـ HTML DOM وإدارة البيانات بين الواجهة الأمامية والخلفية، حيث يمكن استخدام الوراثة لتوحيد عناصر الصفحة أو البيانات المرسلة إلى الخادم. من المواضيع التالية التي يمكن استكشافها: ES6 Classes، Mixins، وPatterns متقدمة لإدارة الوراثة. يُنصح بمتابعة الممارسة العملية على مشاريع صغيرة قبل الانتقال إلى مشاريع كبيرة، والاستمرار في استخدام أدوات التصحيح ومراجعة النماذج الأولية لفهم سلوك الكائنات بدقة.

🧠 اختبر معرفتك

جاهز للبدء

اختبر معرفتك

اختبر فهمك لهذا الموضوع بأسئلة عملية.

4
الأسئلة
🎯
70%
للنجاح
♾️
الوقت
🔄
المحاولات

📝 التعليمات

  • اقرأ كل سؤال بعناية
  • اختر أفضل إجابة لكل سؤال
  • يمكنك إعادة الاختبار عدة مرات كما تريد
  • سيتم عرض تقدمك في الأعلى