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.
