Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.04.2011, 02:14
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Можно ли узнать имена входящих аргументов функции?
Можно ли узнать, что в функцию
function(foo,bar){
   ...
}
переданы аргументы 'foo', 'bar'?
Ответить с цитированием
  #2 (permalink)  
Старый 25.04.2011, 03:52
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 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;
};
Ответить с цитированием
  #3 (permalink)  
Старый 28.04.2011, 08:01
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

и что, действительно бывает нужно такое выяснять?
Ответить с цитированием
  #4 (permalink)  
Старый 29.04.2011, 03:29
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от x-yuri
и что, действительно бывает нужно такое выяснять?
Нужно для функции определить дефолтные значения аргументов, например:
function valera(x, y, z) {
    defaultArgs(arguments, {y: 5, z: 10});
    ...
}
C методом, который предложил Riim это достаточно просто. Еще раз спасибо.
Ответить с цитированием
  #5 (permalink)  
Старый 30.04.2011, 07:43
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

советую подумать, почему так никто не делает... и, если будем развивать тему, приведи какой-нибудь конкретный пример
Ответить с цитированием
  #6 (permalink)  
Старый 30.04.2011, 15:05
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 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 ;
}
Ответить с цитированием
  #7 (permalink)  
Старый 30.04.2011, 22:03
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

x-yuri, melky, так красивее.
Сообщение от x-yuri
почему так никто не делает
Ты всех программистов в лицо знаешь?
Ответить с цитированием
  #8 (permalink)  
Старый 30.04.2011, 23:03
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 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.
Ответить с цитированием
  #9 (permalink)  
Старый 30.04.2011, 23:36
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от poorking
ну передали вы в функцию defaultArgs ряд arguments и хэш имя>значение,
в этой функции вы будете изменять arguments, но имена-то зачем, ведь в arguments значения по Number индексу хранятся
Вот для этого и нужно определить, как называется первый аргумет, как второй и т.д.
Ответить с цитированием
  #10 (permalink)  
Старый 30.04.2011, 23:56
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 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
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать имя функции Bercut Общие вопросы Javascript 27 25.12.2020 08:02
Как можно что-нибудь узнать про интерфейс чужого объекта GRIG Internet Explorer 0 09.03.2011 17:16
Можно ли узнать нажатие кнопки "назад" в браузере ? phenom jQuery 0 03.02.2011 18:07
Как можно узнать что value в INPUT изменилось? moskrc jQuery 2 22.10.2010 09:06
Можно ли узнать назначенные события MainBuh Events/DOM/Window 4 17.08.2010 11:22