Аргументы хранятся в
arguments.
UPD:
Имена аргументов можно получить костыльным методом. Тупо разбивая строку func.toString() Другого выхода вроде нет. Вот нагуглил такой код
function getArgs(func) {
// First match everything inside the function argument parens.
var args = func.toString().match(/function\s.*?\(([^)]*)\)/)[1];
// Split the arguments string into an array comma delimited.
return args.split(',').map(function(arg) {
// Ensure no inline comments are parsed and trim the whitespace.
return arg.replace(/\/\*.*\*\//, '').trim();
}).filter(function(arg) {
// Ensure no undefined values are added.
return arg;
});
}
// Пример
function a(b,c) { }
getArgs(a); // ['b', 'c']
Можете объединить этот код с arguments, чтобы получать и имена и значения.
function Worker(name, surname, rate, days) {
var names = getArgs(Worker);
for (var i = 0; i < names.length; i++) {
var name = names[i];
var value = arguments[i];
console.warn(name, value); // Выведет имя аргумента и его значение.
// Значение будет undefined если оно не будет передано
};
}
Но это тупо, т.к. аргументы имеют имена только в том случае, если они явно объявлены, иначе они просто имеют индекс в arguments. Для этих задач лучше использовать объект.