usar funciones flecha example cuando anonimas javascript function arguments ecmascript-6 destructuring

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:

  1. Utilice la desestructuración para la función setupParentClass6 , pero el antiguo enfoque de ES6 para setupChildClass6 (creo que esta es la mejor opción, simplemente setupChildClass6 nombre):

    var setupChildClass6 = (o) => { rangeSlider.setup(o.minVal, o.maxVal); setupParentClass6(o); };

  2. Use arguments viejos objeto. Pero los arguments 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]); };

  3. ES7 tiene una propuesta para propiedades de descanso / dispersión (si no necesita minVal y maxVal en la función setupParentCalss6 ):

    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); };