الرجوع الي الدرس

إضافة الدالة 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).

أنظر فصل رايات الخصائص و واصفاتها للمراجعة.