Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.10.2011, 15:21
Аспирант
Отправить личное сообщение для mexoboy Посмотреть профиль Найти все сообщения от mexoboy
 
Регистрация: 15.01.2010
Сообщений: 43

Как создать экземпляр имея переменную arguments
Добрый день.

Скажите, а каким образом можно создать экземпляр функции A имея аргументы функции B?
Ответить с цитированием
  #2 (permalink)  
Старый 31.10.2011, 15:27
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Переведи... (с)
Ответить с цитированием
  #3 (permalink)  
Старый 31.10.2011, 15:40
Аспирант
Отправить личное сообщение для mexoboy Посмотреть профиль Найти все сообщения от mexoboy
 
Регистрация: 15.01.2010
Сообщений: 43

function A(a1, a2, a3 ... aN)
{

}

function B(b1, b2, b3 ... bN)
{
     //тут должна быть магия Дэвида Блейна, чтобы было new A(b1, b2, b3 ... bN)
}


Фактически B фабрика A, только с любым количеством аргументов.
Ответить с цитированием
  #4 (permalink)  
Старый 31.10.2011, 16:18
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Простой способ
function A(mass)
{
     alert(mass.length);
}

function B()
{
     new A(arguments)
}


В функции A с единственным переданным аргументом работаем как с массивом, беря по индексу все переданные элементы.
Ответить с цитированием
  #5 (permalink)  
Старый 31.10.2011, 16:23
Аспирант
Отправить личное сообщение для mexoboy Посмотреть профиль Найти все сообщения от mexoboy
 
Регистрация: 15.01.2010
Сообщений: 43

В функцию A должны придти b1, b2 .. bN, а не переменная arguments, где a1 = b1 ... aN = bN.
Ответить с цитированием
  #6 (permalink)  
Старый 31.10.2011, 16:33
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

mexoboy, оно?

B(1,2,3)
function A(a1, a2, a3) {
	alert(a1+', '+a2+', '+a3);
}
function B(b1, b2, b3) {
	var f=function(){A(b1, b2, b3)};
	f();
}


Просто даже не понятно зачем такие выверты... :-\
Ответить с цитированием
  #7 (permalink)  
Старый 31.10.2011, 16:43
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Непонятно, почему этот вариант неудобен. Даже если сделать так:
function B()
{
	var argumentsString
	for (var x = arguments.length; x < arguments.length; x++) {
		argumentsString += arguments[x] 
		if(x < arguments.length-1) {
			argumentsString += ", ";
		}
	}
	eval("new A(" + argumentsString + ");");
}

Вам всё равно придётся работать с arguments, поскольку вам неизвестно, сколько принимать аргументов. Т.е. брать по индексу. Или подразумевается, что в функции A известно количество аргументов?

P.S.
К сожалению, нельзя передать arguments как массив (String(array)), поскольку вместо элементов, разделённых запятыми, возвращается строка Object Arguments.
Ответить с цитированием
  #8 (permalink)  
Старый 31.10.2011, 17:26
Аспирант
Отправить личное сообщение для mexoboy Посмотреть профиль Найти все сообщения от mexoboy
 
Регистрация: 15.01.2010
Сообщений: 43

Сообщение от ksa
Просто даже не понятно зачем такие выверты... :-\
Смотри, есть у меня к примеру 4 конструктора: Boy, Girl, Man, Woman и есть класс Order. В класс Order передается первыми атрибутами, имя, возраст - а все последующие заказ на еду. Мой класс Order смотрит - ага, имя Андрей, значит мне надо вернуть конструктор Boy или Man. Дальше смотрит на возраст - 30. Значит Men. Order возвращает экэземпляр Man куда передает ('Андрей', 30, 'Гамбургер', 'Колла', 'Картофель фри');

GuardCat,
Потому-что эвалы зло, в качестве аргументов нельзя передавать ссылка на объекты.
Ответить с цитированием
  #9 (permalink)  
Старый 31.10.2011, 17:29
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Ок, а arguments-то почему зло? Он и есть как раз для таких случаев.
Ответить с цитированием
  #10 (permalink)  
Старый 31.10.2011, 17:40
Аспирант
Отправить личное сообщение для mexoboy Посмотреть профиль Найти все сообщения от mexoboy
 
Регистрация: 15.01.2010
Сообщений: 43

Сообщение от GuardCat Посмотреть сообщение
Ок, а arguments-то почему зло? Он и есть как раз для таких случаев.
Я говорю, что эвал зло, а не аргументы. Если ты эвалишь объект, у которого у тебя даже есть метод сериализации и десереализации - ты в любом случае теряешь ссылку на сам объект.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать задержку перед .html() Could jQuery 1 17.07.2011 13:42
Как передать элемент в переменную из функции kichSman jQuery 3 12.07.2011 22:16
Как сделать локальную переменную глобальной?? Дмитрий Общие вопросы Javascript 8 02.11.2010 03:33
Как обозначить переменную выбранную в FileChooser? woo_hoo Общие вопросы Javascript 4 03.07.2008 12:58
как создать елемент с вложеными елементами scuter Events/DOM/Window 11 14.05.2008 16:15