Теоретически говоря, у меня есть функция, которая принимает 100 параметров, и я хочу использовать только 1 из них, а это 100-й. Вместо того, чтобы писать 99 пустых строк, прежде чем я смогу передать 100-й, есть ли более простой способ сделать это? Я знаю, что у вас никогда не должно быть 100 параметров, но мне стало любопытно, если это возможно.Пропуск аргументов/параметров без использования пустых строк
ответ
Используйте объекты параметров - вы можете легко установить по умолчанию и переопределить то, что вы хотите с параметром
var foo = myFunction({foo:'bar', bar:25})
объекты параметров Google, например Passing Default Parameter Objects in JavaScript
(но если у вас есть более чем 3 или 4 параметры у вас могут возникнуть более серьезные проблемы)
Даже не думал об использовании объектов, но, по крайней мере, теперь я знаю. Спасибо! – Chrillewoodz
Теоретически, да, есть способ сделать это. Он использует Function.prototype.apply
, что позволяет использовать массив для предоставления параметров вызова функции.
Так что, если наша функция была вызвана someFunc
, вы можете сделать это:
var params = Array(99); // array with 99 undefined parameters
params.push('foo'); // add the 100th parameter
someFunc.apply(null, params);
Как вы говорите, хотя, это серьезно плохая идея. Гораздо лучший подход - использовать объект с именованными значениями.
Как насчет 'someFunc.apply (null, Array.apply (null, {length: 99}). Map (function() {return" ";}). Concat (arg100))'? –
@AaditMShah Да, если нужны пустые строки. Я предполагал, что 'undefined' будет делать эту работу так же хорошо. – lonesomeday
Предполагая, что вы должны когда-либо делать это - что вам не следует, вы должны использовать объект с именованными свойствами в качестве вашего аргумента (ы) - вы можете использовать «null» для держателей пространств. – iandotkelly
Нет. Это невозможно с JavaScript или любым другим языком. (насколько мне известно) –
@MarkGabriel Python имеет необязательные и именованные аргументы (в этом случае порядок не имеет значения). –