تعبير تعريف الأصناف في 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

مصادر ومواصفات