retour au cours

Ajouter toString au dictionnaire

importance: 5

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.