class
في JavaScript
التصريح عن الصنف (class declaration) يؤدي إلى إنشاء صنف جديد له اسمٌ معيّن يستخدم الوراثة عبر سلسلة prototype.
يمكنك أيضًا تعريف الأصناف عبر تعابير تعريف الأصناف (class expression
)، لكن التصريح عن الصنف بهذه الطريقة يختلف عن استخدام تعابير تعريف الأصناف في أنَّه لا يسمح بإعادة التصريح عن الصنف مرةً أخرى، وسيرمي (throw
) خطأً إن حاولنا ذلك.
البنية العامة
class name [extends] {
// محتويات الصنف
}
الوصف
كما في تعابير تعريف الأصناف، ستُنفَّذ التعابر البرمجية الموجودة ضمن الصنف في نمط strict، لاحظ أنَّ الخاصية (property) التي تُشير إلى الدالة البانية هي اختيارية.
لا يمكن استخدام الأصناف المُصرَّح عنها عبر تعابير التصريح عن الأصناف قبل تعريفها (على النقيض من تعابير التصريح عن الدوال).
أمثلة
تصريح بسيط عن صنف
سنُعرِّف في المثال الآتي صنفًا باسم Polygon
ثم أنشأنا صنفًا مشتقًا منه باسم Square
، لاحظ أنَّ الدالة super()
التي استعملناها في الصنف Square
لا يمكن أن تُستخدَم إلا في الدوال البانية، ويجب استدعاؤها قبل استخدام الكلمة المحجوزة this
.
class Polygon {
constructor(height, width) {
this.name = 'Polygon';
this.height = height;
this.width = width;
}
}
class Square extends Polygon {
constructor(length) {
super(length, length);
this.name = 'Square';
}
}
محاولة التصريح عن الصنف مرتين
محاولة إعادة التصريح عن الصنف ستؤدي إلى رمي TypeError
:
class Foo {};
class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared
لاحظ أنَّ الخطأ نفسه سيظهر لو كان الصنف مُعرَّفًا عبر تعابير تعريف الأصناف (class expression
):
var Foo = class {};
class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | 42 | 45 | لا | نعم | 10.1 |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2017.
- معيار ECMAScript 2016.
- معيار ECMAScript 2015 (6th Edition).