Пропуск параметров для сохранения значений по умолчанию в JavaScript - PullRequest
0 голосов
/ 14 сентября 2018

Сценарий выглядит следующим образом:

функция:

const fun = (a="keep this", b="change this")=>{return a + b};

Как сохранить первый параметр по умолчанию и переопределить второй?У меня есть несколько функций, которые используют множество параметров по умолчанию, которые вызываются по-разному, поэтому простое перемещение параметра b в первый аргумент не будет работать.Для простоты a будет гипотетически переопределяться почти так же часто, как b.

Я нашел ответы относительно необязательных параметров, но ни один не показал мне, как задать параметр, сохраняя значения по умолчанию перед указанным параметром.

Я попытался назвать его способом, похожим на python, но безуспешно:

fun(b="changed");

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Когда вы не передаете аргумент функции a, вы действительно передаете undefined, поэтому вы можете просто сделать это для первого аргумента.

const f = (a="a", b="b") => console.log(">", a, b);
f(undefined, "new b") // > a new b

другой способ - просто использовать dict

const f = ({a="a", b="b"}) => ...
f({b: "b content"})
0 голосов
/ 14 сентября 2018

Достаточно создать новый разреженный массив без заполнения.

const fn = (a = "keep", b = "this", c = "change this") => a + b + c;

console.log(fn(...new Array(2), "changed"));
0 голосов
/ 14 сентября 2018

Это можно сделать, предоставив то, что функция видит в любой ситуации, когда параметры не определены:

((a="keep this", b="change this")=>{return a + b})(undefined, "changed");

Простое указание позиции параметра как неопределенного приведет к использованию значения по умолчанию. Он не такой простой и прямой, как Python, однако он будет работать в любой ситуации, когда известно количество пропущенных аргументов.

Вот пример, который может использоваться для более чем одного параметра и может быть полезен в ситуации, когда многие параметры необходимо пропустить:

((a="keep", b="this", c="change this")=>{
   return a+b+c
   })(...(new Array(2).fill(undefined)), "changed");
...