Ajouter toString au dictionnaire
Il existe un objet dictionary
, créé en tant que Object.create(null)
, pour stocker toutes les paires clé
/valeur
.
Ajoutez la méthode dictionary.toString()
, qui devrait renvoyer une liste de clés délimitée par des virgules. Votre toString
ne devrait pas apparaître dans la boucle for..in
sur l’objet.
Voici comment cela devrait fonctionner :
let dictionary = Object.create(null);
// votre code pour ajouter la méthode dictionary.toString
// add some data
dictionary.apple = "Apple";
dictionary.__proto__ = "test"; // __proto__ est une clé de propriété régulière ici
// seulement apple et __proto__ sont dans la boucle
for(let key in dictionary) {
alert(key); // "apple", puis "__proto__"
}
// votre toString en action
alert(dictionary); // "apple,__proto__"
La méthode peut prendre toutes les clés énumérables en utilisant Object.keys
et afficher leur liste.
Pour rendre toString
non-énumérable, définissons-le à l’aide d’un descripteur de propriété. La syntaxe de Object.create
nous permet de fournir un objet avec des descripteurs de propriété comme second argument.
let dictionary = Object.create(null, {
toString: { // définir la propriété toString
value() { // la valeur est une fonction
return Object.keys(this).join();
}
}
});
dictionary.apple = "Apple";
dictionary.__proto__ = "test";
// apple et __proto__ sont dans la boucle
for(let key in dictionary) {
alert(key); // "apple", puis "__proto__"
}
// liste de propriétés séparées par des virgules par toString
alert(dictionary); // "apple,__proto__"
Lorsque nous créons une propriété à l’aide d’un descripteur, ses indicateurs sont false
par défaut. Donc, dans le code ci-dessus, dictionary.toString
est non énumérable.
Voir le chapitre Attributs et descripteurs de propriétés pour revoir.