ما هو الصنف (Class)؟
قالب لإنشاء كائنات متشابهة. بدل كتابة كل كائن يدويًا، نعرّف صنفًا ونصنع منه نسخًا:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
return `أهلًا، أنا ${this.name}`;
}
}
let user = new Person("براء", 25);
user.greet(); // "أهلًا، أنا براء"
user.name; // "براء"
الباني (Constructor)
دالة خاصة تُستدعى تلقائيًا عند new، لتهيئة الخصائص:
constructor(name, age) {
this.name = name; // this = الكائن الجديد
this.age = age;
}
الدوال (Methods)
class Circle {
constructor(radius) {
this.radius = radius;
}
area() {
return Math.PI * this.radius ** 2;
}
}
new Circle(5).area(); // 78.5...
الوراثة (Inheritance) مع extends
صنف يرث خصائص ودوال صنف آخر:
class Animal {
constructor(name) { this.name = name; }
speak() { return `${this.name} يصدر صوتًا`; }
}
class Dog extends Animal {
speak() { // إعادة تعريف (override)
return `${this.name} ينبح`;
}
}
let dog = new Dog("ركس");
dog.speak(); // "ركس ينبح"
استدعاء باني الأب بـ super:
class Student extends Person {
constructor(name, age, major) {
super(name, age); // استدعاء باني Person
this.major = major;
}
}
الدوال والخصائص الساكنة (Static)
تنتمي للصنف نفسه لا للنسخ:
class MathHelper {
static double(n) { return n * 2; }
}
MathHelper.double(5); // 10
حقول خاصة (Private)
class Account {
#balance = 0; // خاص (يبدأ بـ #)
deposit(amount) { this.#balance += amount; }
get balance() { return this.#balance; }
}
الأخطاء الشائعة
- ❌ نسيان
newعند إنشاء كائن →Person(...)بدلnew Person(...). - ❌ نسيان
super()في باني الصنف الوارث قبل استخدامthis. - ❌ نسيان
thisللوصول لخصائص الكائن داخل الدوال.
خلاصة
الأصناف قوالب لإنشاء كائنات: constructor يهيّئها، والدوال تعرّف سلوكها، وextends + super للوراثة، وstatic للأعضاء على مستوى الصنف. هي البرمجة كائنية التوجّه في JavaScript.