javascript - funciones - Parámetro de la función de desestructuración de ES6: nombrar objeto raíz
this javascript (3)
¿Hay alguna manera de retener 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 una metáfora para hacer 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 objeto de
options
para contener múltiples parámetros de configuración.
La clase padre usa algunos parámetros y la subclase usa algunos.
¿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 en
setupChildClass6()
para que puedan pasarse individualmente a
setupParentClass6()
?
// ugh.
var setupChildClass6b = ({minVal, maxVal, rows, columns}) => {
rangeSlider.setup(minVal, maxVal);
setupParentClass6({rows, columns});
};
No puede hacerlo directamente en los argumentos, pero puede 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 puede utilizar el argumento posicional de desestructuración y simple para el mismo parámetro al mismo tiempo. Lo que puedes hacer:
-
Utilice la desestructuración para la función
setupParentClass6
, pero el antiguo enfoque de ES6 parasetupChildClass6
(creo que esta es la mejor opción, simplementesetupChildClass6
nombre):var setupChildClass6 = (o) => { rangeSlider.setup(o.minVal, o.maxVal); setupParentClass6(o); };
-
Use
arguments
viejos objeto. Pero losarguments
pueden ralentizar una función (V8 en particular), 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 / dispersión (si no necesita
minVal
ymaxVal
en la funciónsetupParentCalss6
):var setupChildClass6b = ({minVal, maxVal, ...rest}) => { rangeSlider.setup(minVal, maxVal); setupParentClass6(rest); };
Lamentablemente no es ES6.
Tengo los argumentos de ''opciones'' en muchos lugares yo mismo. Optaría por 1 línea adicional de código. No es digno en este ejemplo, pero es una buena solución cuando se tiene que desestructurar en más líneas.
const setupChildClass6 = options => {
const {minVal, maxVal} = options;
rangeSlider.setup(minVal, maxVal);
setupParentClass6(options);
};