Object.prototype.valueOf()‎

من موسوعة حسوب
مراجعة 15:43، 28 يناير 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات) (استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

الدالة Object.prototype.valueOf()‎ تُعيد قيمةً أوليّةً للكائن المعطي.

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

object.valueOf()

القيمة المعادة

قيمة أوليّة للكائن المعطي.

الوصف

تستدعي JavaScript الدالة valueOf لتحويل كائن ما إلى قيمة أوليّة، ومن النادر أن تحتاج إلى استدعاء الدالة valueOf يدويًا، إذ تستدعيها JavaScript تلقائيًا عندما تصادف كائنًا في مكانٍ تتوقع فيه قيمةً أوليةً.

جميع الكائنات التي تنحدر من الكائن Object ترث الدالة valueOf، وتُعيد جميع الكائنات المُضمَّنة في اللغة تعريف هذه الدالة لتعيد القيمة المناسبة؛ وإذا لم يكن من الممكن تمثيل الكائن بقيمة أوليّة، فستُعيد الدالة valueOf الكائن نفسه.

يمكنك استخدام الدالة valueOf في الشيفرات التي تكتبها لتحويل كائن مضمَّن في اللغة إلى قيمةٍ أوليّة، وعندما تُنشِئ كائنًا خاصًا بك فيمكنك إعادة تعريف الدالة Object.prototype.valueOf()‎ لاستدعاء دالة خاصة بدلًا من الدالة الافتراضية.

إعادة تعريف الدالة valueOf في الكائنات المخصصة

يمكنك إنشاء دالة لتستدعى بدلًا من الدالة valueOf الافتراضية، ويجب ألّا تأخذ هذه الدالة أيّة وسائط.

لنفترض أنَّ لدينا نوع الكائنات MyNumberType وأردنا إنشاء دالة valueOf خاصة به؛ فالشيفرة الآتية تُعيد إسناد دالة مُعرَّفة من قبل المستخدم إلى خاصية valueOf التابعة للكائن:

MyNumberType.prototype.valueOf = function() { return customPrimitiveValue; };

بعد تنفيذ الشيفرة السابقة، ستستدعي JavaScript الدالة السابقة في كل مرة نستخدم فيها الكائن MyNumberType في مكانٍ يتطلب قيمةً أوليةً. صحيحٌ أنَّ الدالة valueOf تستدعى تلقائيًا من JavaScript عادةً، لكن يمكننا استدعاؤها يدويًا كما يلي:

myNumberType.valueOf()

ملاحظة: تحوّل الكائنات التي تُستخدَم في سياقٍ يتطلب سلسلةً نصيةً باستخدام الدالة toString()‎ وهي تختلف عن تحويل كائنات String إلى سلاسل نصية أوليّة باستخدام الدالة valueOf.

أمثلة

يبيّن المثال الآتي كيفية إعادة تعريف الدالة valueOf في كائن مخصص، ثم كيف تستدعي JavaScript الدالة valueOf في حال استخدمنا الكائن في سياقٍ تتوقع اللغةُ فيه قيمةً أوليةً:

function MyNumberType(n) {
    this.number = n;
}

MyNumberType.prototype.valueOf = function() {
    return this.number;
};

var myObj = new MyNumberType(4);
myObj + 3; // 7

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي نعم نعم نعم نعم نعم

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