Parámetro de función de desestructuración de ES6: denominación del objeto raíz
¿Hay alguna manera de conservar el nombre de un argumento de función desestructurada? Es decir, ¿el nombre del objeto raíz?
En ES5, podría hacer esto (usando la herencia como metáfora para aclarar el punto):
// ES5:
var setupParentClass5 = function(options) {
textEditor.setup(options.rows, options.columns);
};
var setupChildClass5 = function(options) {
rangeSlider.setup(options.minVal, options.maxVal);
setupParentClass5(options); // <= we pass the options object UP
};
Estoy usando el mismo options
objeto para contener múltiples parámetros de configuración. Algunos parámetros los utiliza la clase principal y otros los utiliza la subclase.
¿Hay alguna manera de hacer esto con argumentos de funciones desestructuradas en ES6?
// ES6:
var setupParentClass6 = ({rows, columns}) => {
textEditor.setup(rows, columns);
};
var setupChildClass6 = ({minVal, maxVal}) => {
rangeSlider.setup(minVal, maxVal);
setupParentClass6( /* ??? */ ); // how to pass the root options object?
};
¿O necesito extraer todas las opciones setupChildClass6()
para poder pasarlas individualmente setupParentClass6()
?
// ugh.
var setupChildClass6b = ({minVal, maxVal, rows, columns}) => {
rangeSlider.setup(minVal, maxVal);
setupParentClass6({rows, columns});
};
Yo mismo tengo los argumentos de "opciones" en demasiados lugares. Optaría por 1 línea adicional de código. No vale la pena en este ejemplo, pero es una buena solución cuando se tiene desestructuración en más líneas.
const setupChildClass6 = options => {
const {minVal, maxVal} = options;
rangeSlider.setup(minVal, maxVal);
setupParentClass6(options);
};
No puedes hacerlo directamente en los argumentos, pero puedes extraer los valores después:
function myFun(allVals) {
const { val1, val2, val3 } = allVals;
console.log("easy access to individual entries:", val2);
console.log("easy access to all entries:", allVals);
}
No se puede utilizar un argumento posicional con nombre simple y desestructurante para el mismo parámetro al mismo tiempo. Lo que puedes hacer:
Utilice la desestructuración para
setupParentClass6
la función, pero el antiguo enfoque de ES6setupChildClass6
(creo que esta es la mejor opción, simplemente acorte el nombre):var setupChildClass6 = (o) => { rangeSlider.setup(o.minVal, o.maxVal); setupParentClass6(o); };
Utilice
arguments
un objeto antiguo. Peroarguments
puede ralentizar una función (en particular V8), por lo que creo que es un mal enfoque:var setupChildClass6 = ({minVal, maxVal}) => { rangeSlider.setup(minVal, maxVal); setupParentClass6(arguments[0]); };
ES7 tiene una propuesta para propiedades de descanso/extensión (si no las necesita
minVal
ymaxVal
está ensetupParentCalss6
función):var setupChildClass6b = ({minVal, maxVal, ...rest}) => { rangeSlider.setup(minVal, maxVal); setupParentClass6(rest); };
Lamentablemente no es ES6.