Aggiungi toString al dizionario
Abbiamo un oggetto dictionary
, creato come Object.create(null)
, in cui memorizziamo coppie key/value
.
Aggiungi un metodo dictionary.toString()
, il quale dovrebbe ritornare un lista di chiavi separate da virgola. Il metodo toString
non deve essere mostrato nei cicli for..in
.
Dovrebbe funzionare così:
let dictionary = Object.create(null);
// il tuo codice per aggiungere il metodo toString
// aggiungiamo dei valori
dictionary.apple = "Apple";
dictionary.__proto__ = "test"; // __proto__ è una proprietà comune in questo caso
// nel ciclo compaiono solo apple e __proto__
for(let key in dictionary) {
alert(key); // "apple", poi "__proto__"
}
// la tua implementazione di toString in azione
alert(dictionary); // "apple,__proto__"
Il metodo Object.keys
mostra tutte le proprietà enumerabili di un oggetto.
Per rendere toString
non-enumerable, dobbiamo definirlo utilizzando un property descriptor. La sintassi che ci permette di farlo è Object.create
, che ci consente di fornire dei property descriptors come secondo argomento.
let dictionary = Object.create(null, {
toString: { // definiamo la proprietà toString
value() { // il valore è una funzione
return Object.keys(this).join();
}
}
});
dictionary.apple = "Apple";
dictionary.__proto__ = "test";
// apple e __proto__ appaiono nel ciclo
for(let key in dictionary) {
alert(key); // "apple", poi "__proto__"
}
// vengono elencate le proprietà separate da una virgola
alert(dictionary); // "apple,__proto__"
Possiamo crare una proprietà utilizzando un descriptor. Di default i flag vengono impostati a false
. Quindi nel codice sopra, dictionary.toString
è non-enumerable.
Vedi il capitolo property descriptors se hai bisogno di ripassare l’argomento.