2010-07-20 1 views
1

Я создаю querystring из предоставленных аргументов функции Javascript. Я перебираю массив аргументов и хочу иметь аргументName и его значение.Есть ли способ получить имя и значение аргумента при циклическом перемещении массива аргументов?

Thans

+1

Возможно, какой-то пример кода поможет? –

ответ

3

Вам нужно написать функцию по-другому, так как невозможно выполнить то, что вы просите, и это не имеет никакого смысла, если вы думаете об этом; что, если ваша функция вызывается с выражениями и другими вызовами функций в списке аргументов?

Вместо написать такую ​​функцию:

function yourFunction(object) { 
    for (argName in object) { 
    if (object.hasOwnProperty(argName)) { 
     var argValue = object[argName]; 
     // now argName is an argument name, and 
     // argValue is the value, and you can do 
     // whatever you like 
    } 
    } 
} 

При вызове функции, вы будете делать это:

if (whatever) 
    yourFunction({ arg1: value1, arg2: value2, arg3: value3 }); 
-1

for(var key in array)? А затем внутри этого цикла array[key] для доступа к значению.

+0

, который работает только в том случае, если массив является объектом; если это простой старый массив, он будет «работать», но имена будут 0, 1, 2, 3, ... N-1, где N - длина аргумента функции. –

+0

Массив - это сценарий объекта, потому что ассоциативные массивы не существуют в Javascript. С помощью реальных массивов вы все равно будете иметь нормальный цикл и уже знаете, что такое индекс для каждого значения. Поэтому я не очень ценю голосование (кто бы это ни дал). – CharlesLeaf

+0

Я предполагаю, что моя точка зрения заключалась в том, что переменная 'arguments' не является объектом, это массив. Переменная 'array', о которой вы говорите, должна появиться откуда-то +, ни вы, ни упоминание OP о том, откуда она взялась. (fyi downvote был не от меня) –

1

Я так не считаю. класс Function в Javascript имеет свойство length, но нет способа получить имена аргументов, например. х и у в следующем

g = function(x,y) { return x+y; } 

редактировать: Я думаю, технически, учитывая функцию g вы могли бы назвать

g.toString().match(/function\s+\((.*?)\)/) 

, который фиксирует список аргументов функции, то разобрать, что, чтобы получить список имен аргументов.

+0

ОК, кто бы ни был, пожалуйста, дайте полезную причину. –

1

Нет, это не представляется возможным, и я не уверен, как вы думаете, что это может сработать. Если вы назвали аргументы, то вы знаете об именах аргументов и нет никаких проблем:

function f(arg1, arg2, arg3) { 
    var params = { 
     arg1: arg1, 
     arg2: arg2, 
     arg3: arg3 
    }; 
    // Do stuff with params 
} 

В противном случае, все у вас есть массив, как совокупность значений, не имеющие названий.

Смежные вопросы