javascript - keys - object value
¿Cómo desestructurar todas las propiedades en el alcance/cierre actual en ES2015? (2)
Me gustaría hacer algo como esto:
const vegetableColors = {corn: ''yellow'', peas: ''green''};
const {*} = vegetableColors;
console.log(corn);// yellow
console.log(peas);// green
Parece que no puedo encontrar o descubrir cómo hacer esto, ¡pero realmente pensé que lo había visto en algún lugar antes! :PAGS
NOTA:
Estoy usando
Babel
con el
stage
establecido en
0
;
CONTEXTO:
Estoy tratando de ser más seco en
JSX
y no hacer referencia a
this.state
o
this.props
todas partes.
Y tampoco tiene que seguir agregando propiedades para desestructurar si los datos cambian.
Creo que está buscando la
declaración
with
, hace exactamente lo que está pidiendo:
const vegetableColors = {corn: ''yellow'', peas: ''green''};
with (vegetableColors) {
console.log(corn);// yellow
console.log(peas);// green
}
Sin embargo, está en desuso (en modo estricto, que incluye módulos ES6), por una buena razón.
Desestructurar todas las propiedades en el ámbito actual
No puedes en ES6 1 . Y eso es algo bueno . Sea explícito sobre las variables que está introduciendo:
const {corn, peas} = vegetableColors;
Alternativamente, puede extender el objeto global con
Object.assign(global, vegetableColors)
para ponerlos en el ámbito global, pero en realidad, eso es peor que una declaración
with
.
1: ... y aunque no sé si hay un borrador para permitir tales cosas en ES7, puedo decir que cualquier propuesta será eliminada por el TC :-)
Creo que estás buscando:
const {corn, peas} = vegetableColors;
Si
Pointy tiene razón en
que está preguntando cómo hacer esto
sin
conocer los nombres de
corn
y
peas
, no puede hacerlo con una tarea de desestructuración.
Puede hacerlo solo en el ámbito global, utilizando un bucle, pero estoy seguro de que no desea hacerlo en el ámbito global. Aún así, por si acaso:
// I''m sure you don''t really want this, just being thorough
Object.keys(vegetableColors).forEach((key) => {
Object.defineProperty(this, key, {
value: vegetableColors[key]
});
});
(Lanzar
enumerable: true
allí si desea que estas pseudo-constantes sean enumerables).
Eso funciona a nivel global porque se refiere al objeto global.