Можно ли узнать имена входящих аргументов функции?
Можно ли узнать, что в функцию
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, время: 21:33. |