Přidejte toString do slovníku
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í.