الفرق بين المراجعتين لصفحة: «JavaScript/class»

من موسوعة حسوب
لا ملخص تعديل
 
ط استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}'
 
سطر 65: سطر 65:
* معيار [http://www.ecma-international.org/ecma-262/7.0/#sec-class-definitions ECMAScript 2016].
* معيار [http://www.ecma-international.org/ecma-262/7.0/#sec-class-definitions ECMAScript 2016].
* معيار [http://www.ecma-international.org/ecma-262/6.0/#sec-class-definitions ECMAScript 2015 (6th Edition)]‎.  
* معيار [http://www.ecma-international.org/ecma-262/6.0/#sec-class-definitions ECMAScript 2015 (6th Edition)]‎.  
[[تصنيف:JavaScript]]
[[تصنيف:JavaScript|{{SUBPAGENAME}}]]
[[تصنيف:JavaScript Statement]]
[[تصنيف:JavaScript Statement|{{SUBPAGENAME}}]]

المراجعة الحالية بتاريخ 15:36، 28 يناير 2018

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

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