zpět k lekci

Přidejte toString do slovníku

důležitost: 5

Máme objekt slovník vytvořený použitím Object.create(null), do něhož ukládáme libovolné dvojice klíč/hodnota.

Přidejte do něj metodu slovník.toString(), která by měla vracet seznam klíčů oddělených čárkou. Vaše metoda toString by se neměla ukazovat v cyklu for..in nad objektem.

Takto by to mělo fungovat:

let slovník = Object.create(null);

// váš kód přidávající metodu slovník.toString

// přidáme nějaká data
slovník.jablko = "Jablko";
slovník.__proto__ = "test"; // __proto__ je zde klíč obvyklé vlastnosti

// v cyklu jsou jen jablko a __proto__
for(let klíč in slovník) {
  alert(klíč); // "jablko", pak "__proto__"
}

// váš toString v akci
alert(slovník); // "jablko,__proto__"

Metoda může vzít všechny enumerovatelné klíče pomocí Object.keys a vydat jejich seznam.

Abychom učinili toString neenumerovatelnou, definujme ji pomocí deskriptoru vlastnosti. Syntaxe Object.create nám umožní jako druhý argument poskytnout objekt s deskriptory vlastností.

let slovník = Object.create(null, {
  toString: { // definujeme vlastnost toString
    value() { // její hodnotou je funkce
      return Object.keys(this).join();
    }
  }
});

slovník.jablko = "Jablko";
slovník.__proto__ = "test";

// v cyklu jsou jablko a __proto__
for(let klíč in slovník) {
  alert(klíč); // "jablko", pak "__proto__"
}

// seznam vlastností oddělených čárkou, vydaný metodou toString
alert(slovník); // "jablko,__proto__"

Když vytvoříme vlastnost použitím deskriptoru, její přepínače jsou standardně false. V uvedeném kódu je tedy slovník.toString neenumerovatelná.

Pro přehled nahlédněte do kapitoly Přepínače a deskriptory vlastností.