Añadir toString al diccionario
Hay un objeto dictionary
, creado como Object.create(null)
, para almacenar cualquier par clave/valor
.
Agrega el método dictionary.toString()
, que debería devolver una lista de claves delimitadas por comas. Tu toString
no debe aparecer al iterar un for..in
sobre el objeto.
Así es como debería funcionar:
let dictionary = Object.create(null);
// tu código para agregar el método dictionary.toString
// agregar algunos datos
dictionary.apple = "Manzana";
dictionary.__proto__ = "prueba"; // // aquí proto es una propiedad clave común
// solo manzana y __proto__ están en el ciclo
for(let key in dictionary) {
alert(key); // "manzana", después "__proto__"
}
// tu toString en acción
alert(dictionary); // "manzana,__proto__"
El método puede tomar todas las claves enumerables usando Object.keys
y generar su lista.
Para hacer que toString
no sea enumerable, definámoslo usando un descriptor de propiedad. La sintaxis de Object.create
nos permite proporcionar un objeto con descriptores de propiedad como segundo argumento.
let dictionary = Object.create(null, {
toString: { // define la propiedad toString
value() { // el valor es una función
return Object.keys(this).join();
}
}
});
dictionary.apple = "Manzana";
dictionary.__proto__ = "prueba";
// manzana y __proto__ están en el ciclo
for(let key in dictionary) {
alert(key); // "manzana", despues "__proto__"
}
// lista de propiedades separadas por comas por toString
alert(dictionary); // "manzana,__proto__"
Cuando creamos una propiedad usando un descriptor, sus banderas son false
por defecto. Entonces, en el código anterior, dictionary.toString
no es enumerable.
Consulte el capítulo Indicadores y descriptores de propiedad para su revisión.