darsga qaytish

ToStringni lug'atga qo'shing

Har qanday key/value juftligini saqlash uchun Object.create(null) shaklida yaratilgan lug'at obyekti mavjud.

Unga dictionary.toString() usulini qo’shing, bu kalitlarni vergul bilan ajratilgan ro’yxatini qaytarishi kerak. Sizning toString obyekt uchun for..in ko’rinishida bo’lmasligi kerak.

Bu shunday ishlashi kerak:

let dictionary = Object.create(null);

// dictionary.toString usulini qo'shish uchun sizning kodingiz

// ba'zi ma'lumotlarni qo'shing
dictionary.apple = "Apple";
dictionary.__proto__ = "test"; // __proto__ bu yerda odatiy xususiyat kalitidir

// faqat apple va __proto__ tsiklda
for(let key in dictionary) {
  alert(key); // "apple", so'ng "__proto__"
}

// sizning toString amalda
alert(dictionary); // "apple,__proto__"

Usul Object.keys yordamida barcha ro’yxatga olinadigan kalitlarni olishi va ularning ro’yxatini chiqarishi mumkin.

toString ni sanoqsiz qilish uchun, uni xususiyat tavsiflovchisi yordamida aniqlaymiz. Object.create sintaksisi bizni obyektni ikkinchi argument sifatida xususiyat tavsiflovchilari bilan ta’minlashga imkon beradi.

let dictionary = Object.create(null, {
  toString: { // toString xususiyatini aniqlang
    value() { // qiymati funktsiya
      return Object.keys(this).join();
    }
  }
});

dictionary.apple = "Apple";
dictionary.__proto__ = "test";

// apple va __proto__ tsiklda
for(let key in dictionary) {
  alert(key); // "apple", so'ng "__proto__"
}

// toString tomonidan vergul bilan ajratilgan xususiyatlar ro'yxati
alert(dictionary); // "apple,__proto__"

Agar xususiyatni deskriptor yordamida yaratadigan bo’lsak, uning bayroqlari sukut bo’yicha false bo’ladi. Shunday qilib, yuqoridagi kodda dictionary.toString ni sanab bo’lmaydi.

Ko’rib chiqish uchun Xususiyat bayroqlari va tavsiflovchilar bo’limiga qarang.