Можно ли узнать имена входящих аргументов функции?
Можно ли узнать, что в функцию
function(foo,bar){
...
}
переданы аргументы 'foo', 'bar'? |
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;
};
|
и что, действительно бывает нужно такое выяснять?
|
Цитата:
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 ;
}
|
x-yuri, melky, так красивее.
Цитата:
|
FINoM,
Цитата:
Тем более что вам это даст, имена переменных? ну передали вы в функцию defaultArgs ряд arguments и хэш имя>значение, в этой функции вы будете изменять arguments, но имена-то зачем, ведь в arguments значения по Number индексу хранятся, можно как нибудь так defaultArgs(arguments, 5, 6, 7), внутри первый_аргумент[0] = arguments[1] и так до конца arguments, хотя все равно не понятно зачем это |
Цитата:
|
а почему вот так нельзя
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 */
}
Потому что не красиво? |
| Часовой пояс GMT +3, время: 19:37. |