إضافة الدالة toString إلى القاموس
يوجد كائن يسمي dictionary
، تم إنشاؤه باستخدام Object.create(null)
لتخزين خصائص بقيمها.
أضف الدالة dictionary.toString()
لهذا الكائن والتى يجب أن تقوم بإرجاع قائمة من الخصائص بينها الفاصلة. هذا الدالة يجب أن لا تظهر فى التكرار for..in
.
هنا كيف سيتم استخدامها:
let dictionary = Object.create(null);
// الكود الخاص بك لإنشاء الدالة dictionary.toString
// أضف بعض البيانات
dictionary.apple = "Apple";
dictionary.__proto__ = "test"; // __proto__ هي خاصية عادية
// تظهر فقط apple & __proto__
for(let key in dictionary) {
alert(key); // "apple", ثم "__proto__"
}
// استخدام الدالة toString التى صنعتها
alert(dictionary); // "apple,__proto__"
يمكن للدالة أن تأخذ كل الخصائص المعدودة (enumerable) باستخدام Object.keys
وطباعة قائمة بهم.
لجعل الدالة toString
غير معدودة (non-enumerable)، سنقوم بتعريفها باستخدام واصف (descriptor). ويسمح لنا شكل Object.create
أن نضع واصفًا لخاصية كمتغير ثانٍ.
let dictionary = Object.create(null, {
toString: {
value() { // قيمتها عبارة عن دالة
return Object.keys(this).join();
}
}
});
dictionary.apple = "Apple";
dictionary.__proto__ = "test";
// apple و __proto__ فى التكرار
for(let key in dictionary) {
alert(key); // "apple", ثم "__proto__"
}
// comma-separated list of properties by toString
// قائمة من االخصائص مفصول بينها بالفاصلة
alert(dictionary); // "apple,__proto__"
عند إنشاء خاصية بواصف فإن مُعرِّفاتها تكون قيمها false
. ولذلك فى الكود أعلاه فإن dictionary.toString
هي غير معدودة (non-enumerable).
أنظر فصل رايات الخصائص و واصفاتها للمراجعة.