Додайте toString до об’єкту-словника
Дано об’єкт dictionary
, створений за допомогою Object.create(null)
, щоб зберегти будь-які пари ключ/значення
.
Додайте метод dictionary.toString()
до об’єкта, який повертає перелік ключів через кому. Метод toString
не повинен показуватися, якщо застосувати до об’єкта цикл for..in
.
Тут показано як це має працювати:
let dictionary = Object.create(null);
// ваш код, щоб додати dictionary.toString метод
// додаємо певні дані
dictionary.apple = "Яблуко";
dictionary.__proto__ = "тест"; // __proto__ тут є звичайною властивістю об’єкта
// тільки ключі apple та __proto__ показуються в циклі
for(let key in dictionary) {
alert(key); // "apple", потім "__proto__"
}
// ваш метод toString в дії
alert(dictionary); // "apple,__proto__"
Метод може взяти всі перелічувані ключі об’єкта за допомогою Object.keys
та вивести їх перелік.
Для того щоб зробити метод toString
не перлічуваним, визначимо його використовуючи дескриптор властивості. Синтаксис Object.create
дозволяє нам надати об’єкту дескриптори властивостей як другий аргумент.
let dictionary = Object.create(null, {
toString: { // визначаємо властивість toString
value() { // value є функцією
return Object.keys(this).join();
}
}
});
dictionary.apple = "Яблуко";
dictionary.__proto__ = "тест";
// apple та __proto__ показуються в циклі
for(let key in dictionary) {
alert(key); // "apple", потім "__proto__"
}
// метод toString повертає перелік властивостей через кому
alert(dictionary); // "apple,__proto__"
Коли ми створюємо властивість використовуючи дескриптор, його опції мають значення false
за замовчуванням. Тому в коді вище dictionary.toString
є не перелічуваним.
Продивіться розділ Прапори та дескриптори властивостей.