تعبير تعريف الأصناف في JavaScript
تعبير تعريف الأصناف (class expression) هو إحدى الطرائق المستخدمة لتعريف صنف في ECMAScript 2015، وهو شبيه بتعابير تعريف الدوال (function expressions)، ويمكن أن يكون تعبير تعريف الأصناف مسمىً أو غير مسمى، وإذا كان مسمى فسيكون اسم الصنف محليًا لجسم الصنف فقط؛ لاحظ أنَّ الأصناف في JavaScript تستخدم الوراثة عبر سلسلة prototype.
البنية العامة
var MyClass = class [className] [extends] {
// محتويات الصنف
};
الوصف
يملك تعبير تعريف الأصناف شكلًا شبيهًا بالتصريح عن الأصناف (class declaration) لكن يمكنك حذف اسم الصنف في تعبير تعريف الأصناف، ويُسمَح لك بإعادة تعريف (أو إعادة التصريح) الأصناف ولن يُرمى أي خطأ، على النقيض من تعابير التصريح عن الأصناف؛ لاحظ أنَّ نوع الأصناف المُولَّدة عبر تعبير تعريف الأصناف سيكون function
دومًا.
وكما في تعابير التصريح عن الأصناف، ستُنفَّذ التعابير البرمجية الموجودة جسم الأصناف المُعرَّفة عبر تعابير التصريح عن الأصناف بنمط strict.
'use strict';
var Foo = class {}; // الدالة البانية اختيارية
var Foo = class {}; // يُسمَح بإعادة تعريف الصنف
typeof Foo; // "function"
typeof class {}; // "function"
Foo instanceof Object; // true
Foo instanceof Function; // true
class Foo {}; // TypeError
أمثلة
تعبير بسيط لتعريف صنف
مثال بسيط عن تعبير لتعريف صنف مجهول (anonymous class)، الذي يمكننا الإشارة إليه باستخدام المتغير Foo
:
var Foo = class {
constructor() {}
bar() {
return 'Hello World!';
}
};
var instance = new Foo();
instance.bar(); // "Hello World!"
Foo.name; // "Foo"
تعابير تعريف الأصناف مع تحديد اسم لها
إذا أردت الإشارة إلى الصنف داخله، فيمكنك إنشاء تعبير مسمى للصنف، لكن لاحظ أنَّ الاسم سيكون متاحًا داخل الصنف فقط:
var Foo = class NamedFoo {
constructor() {}
whoIsThere() {
return NamedFoo.name;
}
}
var bar = new Foo();
bar.whoIsThere(); // "NamedFoo"
NamedFoo.name; // ReferenceError: NamedFoo is not defined
Foo.name; // "NamedFoo"
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | 42 | 45 | لا | نعم | 10.1 |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2017.
- معيار ECMAScript 2016.
- معيار ECMAScript 2015 (6th Edition).