Object.prototype.toString()
الدالة Object.prototype.toString()
تُعيد سلسلةً نصيةً تُمثِّل الكائن.
البنية العامة
obj.toString()
القيمة المعادة
سلسلة نصيّة تُمثِّل الكائن.
الوصف
يملك كل كائن الدالة toString()
التي ستستدعى تلقائيًا عندما يراد تمثيل الكائن كقيمة نصية أو عند الإشارة إلى الكائن في مكانٍ تتوقع JavaScript توفير سلسلة نصية فيه؛ وافتراضيًا توجد الدالة toString()
في جميع الكائنات التي تنحدر من الكائن Object
؛ وإذا لم يُعاد تعريف هذه الدالة في الكائن المُخصَّص فستُعيد القيمة "[object type]"
، إذ إنَّ type
هو نوع الكائن، والشيفرة الآتية توضِّح ذلك:
var o = new Object();
o.toString(); // [object Object]
ملاحظة: بدءًا من معيار ECMAScript 5.1، أصبح استدعاء الدالة toString()
على قيم null
يُعيد [object Null]
، وستُعيد عند استدعائها على قيم undefined
القيمة [object Undefined]
.
أمثلة
إعادة تعريف الدالة toString
الافتراضية
يمكننا إنشاء دالة لتستدعى بدلًا من دالة toString()
الافتراضية، فالدالة toString()
لا تأخذ أيّة وسائط ويجب أن تُعيد قيمةً، ويمكن أن تعيد دالة toString()
التي ستُنشِئها أيّة قيمة تشاء، لكن الفائدة القصوى تتحقق إن أعادت معلومات حول الكائن.
سنُعرِّف نوع الكائنات Dog
في المثال الآتي، وسنُنشِئ نسخةً منه باسم theDog
:
function Dog(name, breed, color, sex) {
this.name = name;
this.breed = breed;
this.color = color;
this.sex = sex;
}
theDog = new Dog('Gabby', 'Lab', 'chocolate', 'female');
إذا استدعينا الدالة toString()
على هذا الكائن المُخصَّص، فستُعاد القيمة الموروثة من الكائن Object
:
theDog.toString(); // [object Object]
الشيفرة الآتية تُنشِئ دالةً جديدةً باسم dogToString()
وسنُسندها إلى خاصية toString
لكي نعيد كتابة دالة toString()
الافتراضية؛ تولِّد هذه الدالة سلسلةً نصيةً تحتوي على اسم وفصيلة ولون وجنس الكائن:
Dog.prototype.toString = function dogToString() {
var ret = 'Dog ' + this.name + ' is a ' + this.sex + ' ' + this.color + ' ' + this.breed;
return ret;
}
بعد تنفيذ الشيفرة السابقة، ستستدعي JavaScript الدالة dogToString()
في كل مرّة يُستخدَم فيها الكائن theDog
كسلسلة نصية، وستُعاد القيمة الآتية:
"Dog Gabby is a female chocolate Lab"
استخدام الدالة toString
لمعرفة صنف الكائن
يمكن أن تُستخدَم الدالة toString()
مع جميع الكائنات وتسمح لنا بمعرفة صنفها، ولاستخدام الدالة Object.prototype.toString()
مع جميع الكائنات فعلينا استخدام الدالة Function.prototype.call()
أو الدالة Function.prototype.apply()
، ونُمرِّر الكائن الذي نريد معرفة صنفه كأوّل وسيط إليها:
var toString = Object.prototype.toString;
toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]
// ECMAScript 5.1
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 1st Edition.