الوصول إلى الخاصيات في JavaScript

من موسوعة حسوب
مراجعة 11:19، 16 يناير 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

طرائق الوصول إلى الخاصيات توفِّر وصولًا إلى خاصيات أحد الكائنات باستخدام طريقة النقط أو طريقة الأقواس.

البنية العامة

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
الدعم الأساسي نعم نعم نعم نعم نعم

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