class أساسيات الفئات (مع أدوات الوصول والأعضاء الساكنة)

آخر تحديث: 2026-10-22

class أساسيات الفئات (مع أدوات الوصول والأعضاء الساكنة)

تجمّع الفئة البيانات والسلوك معًا: الحقول تخزن الحالة، والمُنشئ يبدئها، والطرق تعرّف السلوك. تنشئ new نسخةً ويشير this إلى النسخة الحالية. تضيف TS فوق فئات JS تعليقات أنواع الحقول وفحوصات وقت الترجمة، فتظهر أخطاء «نسيان التهيئة» و«تمرير معاملات خاطئة» أثناء كتابة الكود.

المجموعةالدوال والأصناف
النوعبناء الجملة
الوضع الصارمغير مطلوب

ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.

📝 الصيغة

class Book {
  title: string;   // حقل: نوع صريح
  author: string;
  copies: number;

  constructor(title: string, author: string, copies = 1) {
    this.title = title;
    this.author = author;
    this.copies = copies;
  }

  describe(): string {
    return `${this.title} - ${this.author}`;
  }
}

const book = new Book("مشكلة الأجسام الثلاثة", "ليو شيشين", 3);

⚙️ المعاملات

constructorالمُنشئ: يُنفَّذ عند new وهو مسؤول عن تهيئة كل حقل
describe(): stringالطريقة: سلوك معرَّف على النموذج الأولي (prototype)؛ ونوع إرجاعها مُعلَّق صراحةً

القيمة المُعادة:تُعلَّق أنواع إرجاع الطرق صراحةً؛ ولا يُكتب للمُنشئ constructor نوع إرجاع (فهو يعيد ضمنيًا النسخة الجديدة نفسها).

▶ مثال

عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:

الناتج:

مشكلة الأجسام الثلاثة - ليو شيشين (3 نسخ)

(مخرجات التشغيل بعد التحويل؛ new Book("三体", 123) سيعطي خطأ ترجمة — المعامل الثاني يجب أن يكون string)

💡 نقاط مهمة

ℹ️ معلومة يمكن تهيئة الحقول مباشرةً عند التصريح والتخلي عن الإسناد في المُنشئ: copies: number = 1؛ ويمكن أيضًا استنتاج النوع من قيمة التهيئة.
💡 تلميح «خصائص المعاملات» ميزة خاصة بـ TS: constructor(public title: string) يصرح بالمعامل وينشئ الحقل المتطابق ويبدئه في خطوة واحدة، أي ما يعادل كتابة this.title = title يدويًا.
⚠️ تنبيه عند تفعيل strictPropertyInitialization تُخطئ الحقول التي لم تُسند قيمة لها في التصريح أو المُنشئ؛ وحقول القيم المحتملة فارغة تُكتب title: string | undefined، أما الحقول التي تُسند لاحقًا فاستخدم definite assignment (!).
المزيد من الحالات قادم قريبًا.

📚 دروس ذات صلة

❓ أسئلة شائعة

س هل يمكن إغفال أنواع الحقول؟
ج نعم عند التهيئة المباشرة في التصريح (copies = 1 يستنتج number)؛ أما التصريح البسيط بلا تهيئة فيتطلب تعليق النوع وإلا كان any ضمنيًا.
س هل للمُنشئ constructor نوع إرجاع؟
ج لا يُكتب ولا يجوز كتابته — فهو يعيد ضمنيًا نسخة الفئة. ولا يسمح TS بكتابة تعليق نوع القيمة المُعادة للـ constructor؛ فنوع تعبير new هو دائمًا نسخة الفئة.
س ماذا لو ضاع this داخل استدعاء راجع؟
ج استخدم حقول الدوال السهمية (say = () => this.x) أو اربطه قبل تمرير الاستدعاء الراجع؛ كما يدعم TS معامل this (fn(this: Book)) لفرض ذلك وقت الترجمة.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%