25.04.2011, 02:14
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Можно ли узнать имена входящих аргументов функции?
Можно ли узнать, что в функцию
function(foo,bar){
...
}
переданы аргументы 'foo', 'bar'?
|
|
25.04.2011, 03:52
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
PrototypeJs:
Function.prototype.argumentNames = function() {
var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
.replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
.replace(/\s+/g, '').split(',');
return names.length == 1 && !names[0] ? [] : names;
};
|
|
28.04.2011, 08:01
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
и что, действительно бывает нужно такое выяснять?
|
|
29.04.2011, 03:29
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Сообщение от x-yuri
|
и что, действительно бывает нужно такое выяснять?
|
Нужно для функции определить дефолтные значения аргументов, например:
function valera(x, y, z) {
defaultArgs(arguments, {y: 5, z: 10});
...
}
C методом, который предложил Riim это достаточно просто. Еще раз спасибо.
|
|
30.04.2011, 07:43
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
советую подумать, почему так никто не делает... и, если будем развивать тему, приведи какой-нибудь конкретный пример
|
|
30.04.2011, 15:05
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от FINoM
|
Нужно для функции определить дефолтные значения аргументов, например:
function valera(x, y, z) {
defaultArgs(arguments, {y: 5, z: 10});
...
}
C методом, который предложил Riim это достаточно просто. Еще раз спасибо.
|
по-моему,так проще!
function valera(x, y, z) {
y=y || 5, z = z || 10;
...
// или так
y = typeof y === 'undefined' ? 5 : y ;
z = typeof z === 'undefined' ? 10 : z ;
}
|
|
30.04.2011, 22:03
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
x-yuri, melky, так красивее.
Сообщение от x-yuri
|
почему так никто не делает
|
Ты всех программистов в лицо знаешь?
|
|
30.04.2011, 23:03
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
FINoM,
Сообщение от FINoM
|
x-yuri, melky, так красивее.
|
О_О по-моему это.. эмм.. как-то не правильно... Обычно оптимизируют в сторону производительности, а вы в сторону красивости, а если функция большая, парсинг все равно какое то время будет занимать, а если функция в анимации какой нибудь вызваться будет... Так нельзя, это безумие
Тем более что вам это даст, имена переменных? ну передали вы в функцию defaultArgs ряд arguments и хэш имя>значение,
в этой функции вы будете изменять arguments, но имена-то зачем, ведь в arguments значения по Number индексу хранятся, можно как нибудь так defaultArgs(arguments, 5, 6, 7), внутри первый_аргумент[0] = arguments[1] и так до конца arguments, хотя все равно не понятно зачем это
__________________
readOnly
Последний раз редактировалось poorking, 30.04.2011 в 23:16.
|
|
30.04.2011, 23:36
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Сообщение от poorking
|
ну передали вы в функцию defaultArgs ряд arguments и хэш имя>значение,
в этой функции вы будете изменять arguments, но имена-то зачем, ведь в arguments значения по Number индексу хранятся
|
Вот для этого и нужно определить, как называется первый аргумет, как второй и т.д.
|
|
30.04.2011, 23:56
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
а почему вот так нельзя
function defaultArgs(/* arguments */){
var len = arguments.length - 1;
for(var i = 0; i < len; i ++){
arguments[0][i] = arguments[i + 1];
}
}
function valera(x, y, z){
defaultArgs(arguments, 5,6,7);
/* code */
}
Потому что не красиво?
__________________
readOnly
|
|
|
|