una - prompt javascript ejemplo
¿Nombres de parámetros con ES6? (4)
Al ver que el valor del parámetro predeterminado solo se usa cuando el parámetro no está definido, la única forma de "omitir" un parámetro y volver a la configuración predeterminada sería enviar undefined
en su lugar:
call_api(''/api/clients/new'', function(x){console.log(x)}, undefined, {1:2})
Ejemplo: Babel REPL
El valor de la query
dentro de la función será {}
(o lo que sea que configure de manera predeterminada) en este caso.
Esto sería algo similar a lo que hace Visual Basic cuando quiere usar el valor de parámetro predeterminado pasando un valor vacío. (por ejemplo, sub name(argument 1, , , argument 4)
)
De lo contrario, si desea soporte para los parámetros con nombre, el mejor compromiso sería la respuesta proporcionada por @Benjamin Gruenbaum.
Actualización: es posible que este artículo brinde una opción con la palabra clave arguments
o, mejor aún, que pueda iterar sobre la colección ES6 ...rest
parameters para simular una función sobrecargada en Javascript.
He definido una función como:
function call_api(url, callback, query = {}, body = {})
Esperaba una sintaxis en la que pudiera proporcionar cuerpo y omitir la consulta:
call_api(''/api/clients/new'', function(x){console.log(x)}, body={1:2})
Pero tengo que usar esta solución:
call_api(''/api/clients/new'', function(x){console.log(x)}, {}, {1:2})
Incluso si proporciono body=
, parece que aparece como el parámetro de query
. Yo uso Babel con Webpack. Probé la sintaxis en la consola de Chrome y en el código fuente de Webpack.
¿Es compatible tal sintaxis con ES6? ¿Como funciona?
Como se muestra en este sitio , los valores predeterminados son solo para los parámetros que necesitan un valor predeterminado (como un parámetro de opciones), pero no para los parámetros de ''omisión''.
Lo que estás tratando de hacer es
// function definition
function hi(a,b,c,d)
// function call
hi(a,b,d)
ES6 todavía va a pensar que su ''d'', es la c definida, independientemente de su valor predeterminado.
Entonces, no, ES6 no tiene esa sintaxis.
No puede especificar a qué parámetro asigna en su llamada.
call_api(''/api/clients/new'', function(x){console.log(x)}, body={1:2})
Es equivalente a establecer una variable llamada cuerpo fuera de la función y luego pasar su valor en el punto del parámetro de consulta.
Sin embargo, podrías usar la desestructuración para lograr lo que quieres.
function call_api(url, callback, {query = {}, body = {}} = {})
Entonces en tu llamada harías esto
call_api(''/api/clients/new'', function(x){console.log(x)}, {body:{1:2}})
Recomiendo que se solucione esto pasando un objeto y utilizando la desestructuración de objetos:
function callApi({url, callback, query = {}, body = {}})
Y luego llámalo como:
callAPI({url: "/api/..", callback: (x => console.log(x)), body: {a:2}})
Lo cual le daría una sintaxis similar a la que desea.
Los argumentos con nombre se han considerado y rechazado para JavaScript, a diferencia de otros lenguajes como C # y Python, que los usan. Aquí hay una discusión reciente sobre esto desde la lista de correo del idioma.