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

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