الوصول إلى الخاصيات في JavaScript
طرائق الوصول إلى الخاصيات توفِّر وصولًا إلى خاصيات أحد الكائنات باستخدام طريقة النقط أو طريقة الأقواس.
البنية العامة
object.property
object['property']
الوصف
يمكننا عدّ الكائنات على أنها مصفوفات ترابطية (أي associative array، ويُطلَق عليها أيضًا map و dictionary و hash و lookup table)، وتكون المفاتيح (keys) في المصفوفة هي أسماء خاصيات الكائن.
من الشائع عند حديثنا عن خاصيات الكائنات التفريق بين الخاصيات (properties) والدوال التابعة للكائن، لكن تقنيًا تكون الدوال هي خاصيات مُنشَأة من الكائن Function
.
هنالك طريقتان للوصول إلى خاصيات الكائنات: طريقة النقط وطريقة الأقواس.
طريقة النقط
get = object.property;
object.property = set;
يجب أن يكون اسم الخاصية property
مُعرِّفًا صالحًا في JavaScript، أي يجب أن يكون سلسلةً من المحارف النصية والأرقام، ويمكن تضمين شرطة سفلية فيه _
أو إشارة الدولار $
، لكن لا يجوز أن يبدأ برقم، فمثلًا يجوز استخدام المُعرِّف object.$1
لكن لا يجوز استخدام object.1
.
document.createElement('pre');
سنصل في الشيفرة السابقة إلى الدالة createElement
، التي هي خاصيةٌ من خاصيات الكائن document
.
إذا أردتَ استخدام دالة على قيمة رقمية أوليّة ولم يكن لها فاصلة عشرية، فاترك فراغًا (أو فراغات) قبل النقطة التي تسبق الدالة لمنع تفسيرها كفاصلة عشرية، أو ضع نقطتين وراء بعضهما، أو ضع معامل التجميع:
77 .toExponential();
// أو
77
.toExponential();
// أو
(77).toExponential();
// أو
77..toExponential();
// أو
77.0.toExponential();
// لأن 77. === 77.0
طريقة الأقواس
get = object[property_name];
object[property_name] = set;
اسم الخاصية property_name
هو سلسلة نصية، وليس ضروريًا أن تكون السلسلةُ النصيةُ معُرِّفًا صالحًا في JavaScript، وإنما يمكن أن تكون أيّة قيمة مثل "1foo"
و "!bar!"
وحتى " "
(فراغ).
document['createElement']('pre');
الشيفرة السابقة لها نفس تأثير الشيفرة المذكورة في القسم السابق. يُسمَح أيضًا بوجود فراغ بين القوس واسم الكائن كما في الشيفرة الآتية:
document ['createElement']('pre');
أسماء الخاصيات
يجب أن تكون أسماء الخاصيات سلاسلَ نصيةً، وهذا يعني أنَّه لا يُسمَح باستخدام كائنات ليست سلاسل نصية كمفاتيح لخاصيات الكائن، وأيّة كائنات غير نصية -بما في ذلك الأرقام- ستحوّل إلى سلسلة نصية باستخدام الدالة toString()
:
var object = {};
object['1'] = 'value';
console.log(object[1]);
ناتج المثال السابق هو value
لأنَّ القيمة الرقمية 1 قد حُوِّلَت إلى '1'.
ملاحظة عن استخدام eval
قد يستخدم البعض الدالة eval
في الحالات التي يمكن استخدام طريقة الأقواس فيها، فالشكل الآتي نراه في سكربتات كثيرة:
x = eval('document.forms.form_name.elements.' + strFormControl + '.value');
الدالة eval
دالةٌ بطيئةٌ ويجب تفادي استخدامها عند القدرة على ذلك؛ لاحظ أيضًا أنَّ قيمة strFormControl
يجب أن تكون مُعرِّفًا صالحًا في JavaScript، وقت تكون أسماء أو مُعرِّفات حقول النموذج غير صالحة كمُعرِّفات في JavaScript، لذا من الأفضل استخدام طريقة الأقواس في هذه الحالة:
x = document.forms['form_name'].elements[strFormControl].value;
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 1st Edition .