назад до уроку

Додайте toString до об’єкту-словника

важливість: 5

Дано об’єкт 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 є не перелічуваним.

Продивіться розділ Прапори та дескриптори властивостей.