2014-11-03 2 views
1

Теоретически говоря, у меня есть функция, которая принимает 100 параметров, и я хочу использовать только 1 из них, а это 100-й. Вместо того, чтобы писать 99 пустых строк, прежде чем я смогу передать 100-й, есть ли более простой способ сделать это? Я знаю, что у вас никогда не должно быть 100 параметров, но мне стало любопытно, если это возможно.Пропуск аргументов/параметров без использования пустых строк

+4

Предполагая, что вы должны когда-либо делать это - что вам не следует, вы должны использовать объект с именованными свойствами в качестве вашего аргумента (ы) - вы можете использовать «null» для держателей пространств. – iandotkelly

+0

Нет. Это невозможно с JavaScript или любым другим языком. (насколько мне известно) –

+0

@MarkGabriel Python имеет необязательные и именованные аргументы (в этом случае порядок не имеет значения). –

ответ

1

Используйте объекты параметров - вы можете легко установить по умолчанию и переопределить то, что вы хотите с параметром

var foo = myFunction({foo:'bar', bar:25}) 

объекты параметров Google, например Passing Default Parameter Objects in JavaScript

(но если у вас есть более чем 3 или 4 параметры у вас могут возникнуть более серьезные проблемы)

+0

Даже не думал об использовании объектов, но, по крайней мере, теперь я знаю. Спасибо! – Chrillewoodz

2

Теоретически, да, есть способ сделать это. Он использует Function.prototype.apply, что позволяет использовать массив для предоставления параметров вызова функции.

Так что, если наша функция была вызвана someFunc, вы можете сделать это:

var params = Array(99); // array with 99 undefined parameters 
params.push('foo'); // add the 100th parameter 

someFunc.apply(null, params); 

Как вы говорите, хотя, это серьезно плохая идея. Гораздо лучший подход - использовать объект с именованными значениями.

+0

Как насчет 'someFunc.apply (null, Array.apply (null, {length: 99}). Map (function() {return" ";}). Concat (arg100))'? –

+0

@AaditMShah Да, если нужны пустые строки. Я предполагал, что 'undefined' будет делать эту работу так же хорошо. – lonesomeday