Tilføj toString til ordbogen
Der er et objekt dictionary, oprettet som Object.create(null), til at gemme enhver key/value par.
Tilføj metoden dictionary.toString() til det, som skal returnere en komma-separeret liste af nøgler. Din toString bør ikke vises i for..in over objektet.
Den bør virke sådan her:
let dictionary = Object.create(null);
// din kode til at tilføje dictionary.toString metoden
// tilføj nogle data
dictionary.apple = "æble";
dictionary.__proto__ = "test"; // __proto__ is a regular property key here
// Kun apple og __proto__ er i loopet
for(let key in dictionary) {
alert(key); // "apple" og "__proto__"
}
// din toString i aktion
alert(dictionary); // "apple,__proto__"
Metoden kan tage alle enumerable (tælbare) nøgler ved hjælp af Object.keys og outputte deres liste.
For at gøre toString non-enumerable, lad os definere den ved hjælp af en egenskabsbeskrivelse. Syntaksen for Object.create giver os mulighed for at give et objekt med egenskabsbeskrivelser som anden argument.
let dictionary = Object.create(null, {
toString: { // definer egenskaben toString
value() { // value er en funktion
return Object.keys(this).join();
}
}
});
dictionary.apple = "Æble";
dictionary.__proto__ = "test";
// Kun apple og __proto__ er i loopet
for(let key in dictionary) {
alert(key); // "apple" og "__proto__"
}
// kommasepareret liste af egenskaber fra toString
alert(dictionary); // "apple,__proto__"
Når vi opretter en egenskab ved hjælp af en egenskabsbeskrivelser, er dens flag som standard sat til false. Så i koden ovenfor er dictionary.toString non-enumerable.
Se kapitlet Flag og beskrivelser for objektegenskaber for en gennemgang.