تقوم عدة اقتراحات بتوسيع بناء جملة الفئة الموجود في JavaScript مع وظائف جديدة. تشرح هذه المقالة بناء الجملة الجديد لحقول الطبقة العامة في V8 v7.2 و Chrome 72 ، بالإضافة إلى الحقول الخاصة القادمة.
فيما يلي مثال على التعليمة البرمجية التي تنشئ مثيلًا لـ GrowingCounter :
const counter = new IncreasingCounter(); counter.value;
لاحظ أن الوصول إلى القيمة ينفذ بعض التعليمات البرمجية (إخراج رسالة إلى السجل) قبل إرجاع القيمة. اسأل نفسك الآن: كيف يمكنك تطبيق هذه الفئة في JavaScript؟
فصول ES2015
يوجد أدناه مثال على كيفية تطبيق فئة GrowingCounter باستخدام بناء جملة ES2015:
class IncreasingCounter { constructor() { this._count = 0; } get value() { console.log('Getting the current value!'); return this._count; } increment() { this._count++; } }
يوفر الفصل قيمة getter وطريقة لزيادة قيمة في نموذج أولي. أكثر فضولاً ، أن لدى الفصل مُنشئ يقوم ببدء خاصية _count وتعيين قيمته الأولية إلى 0. الآن نستخدم بادئة تسطير أسفل السطر للإشارة إلى أنه لا ينبغي استخدام _count مباشرة خارج الفصل ، ولكن هذا مجرد اصطلاح ؛ في الواقع ، هذه ليست ملكية خاصة ، ولا يتم تعريف هذه الدلالات في اللغة نفسها.
const counter = new IncreasingCounter(); counter.value;
الحقول العامة الصف
بناء الجملة الجديد للحقول العامة يبسط تعريف الفئة:
class IncreasingCounter { _count = 0; get value() { console.log('Getting the current value!'); return this._count; } increment() { this._count++; } }
يتم الآن تعريف خاصية _count بإيجاز في بداية الفصل الدراسي. لم نعد بحاجة إلى مُنشئ فقط لتحديد بعض الحقول. عظيم!
ومع ذلك ، لا يزال _count خاصية عامة. وفي هذا المثال المحدد ، نريد منع الوصول إلى هذا الحقل مباشرةً.
حقول الصف الخاص
هذا هو المكان الذي تأتي فيه الحقول الخاصة للإنقاذ. يشبه بناء الجملة الجديد للحقول الخاصة بناء جملة الحقول العامة ، إلا أنك تضع علامة عليها كخاصة باستخدام الرمز # . قد تعتقد أن # هو مجرد جزء من اسم الحقل:
class IncreasingCounter { #count = 0; get value() { console.log('Getting the current value!'); return this.#count; } increment() { this.#count++; } }
الحقول الخاصة غير متوفرة خارج نص الفصل الدراسي:
const counter = new IncreasingCounter(); counter.#count;
خصائص ثابتة
يمكن استخدام بناء جملة حقل الفئة لإنشاء خصائص وطرق ثابتة عامة وخاصة ، كما هو موضح أدناه:
class FakeMath {
تبسيط العمل مع الفئات الفرعية
تصبح فوائد بناء جملة الحقل الجديد أكثر وضوحًا عند العمل مع الفئات الفرعية التي تقدم حقولًا إضافية. تخيل فئة قاعدة الحيوان التالية:
class Animal { constructor(name) { this.name = name; } }
لإنشاء فئة فرعية من Cat تضيف خاصية جديدة إلى المثيل ، كان يلزمك في السابق الاتصال بـ super () للاتصال بمنشئ الفئة الأساسية للحيوانات قبل إنشاء هذه الخاصية:
class Cat extends Animal { constructor(name) { super(name); this.likesBaths = false; } meow() { console.log('Meow!'); } }
يوجد الكثير من التعليمات البرمجية الخاصة بالإشارة إلى أن القطط لا تحب أن تأخذ حمامًا. لحسن الحظ ، فإن بناء جملة حقل الفئة الجديد يلغي الحاجة إلى تعريف هذا المُنشئ باستدعاء محرج إلى super () :
class Cat extends Animal { likesBaths = false; meow() { console.log('Meow!'); } }
المجموع
تتوفر حقول الطبقة العامة بدءًا من V8 v7.2 و Chrome 72. وهناك خطط لإطلاق حقول الصف الخاص قريبًا.