Че-то либо я туплю под ночь, либо незнаю решения... Вобщем есть массив и есть функция. Нужно передать функции данный массив как ее аргументы. Количество элементов в массиве мы незнаем. То есть, грубо говоря, нужно из Code: var a = [123, 234, 345], b = function(){...}; сделать Code: b(a[0], a[1], a[2]); вот только мы незнаем изначально сколько элементов в "a". Вопрос - как вызывать b(), передавая именно столько аргументов, сколько элементов в "а"?
Мсье знает толк в извращениях? А почему нельзя массив аргументом передать, а в функции с ним делать уже всё, что угодно?
Нет, мсье, так не пойдет, так как таких функций типа b() будет много, и внутри нужно использовать именно переменную модель, а не модель получения значений переменных из аргумент-массива. p.s.: евал не предлагать.
Может, метод apply() поможет реализации столь мудрёной модели? Code: var a = [123, 234, 345], b = function() { for (i in arguments) { alert(arguments[i]); } }; b.apply(this, a);
Протестил. Как и ожидалось, 3 alert'a: 123, 234 и 345. Что говорит firebug? Может, вовсе и не в этом месте затык? upd: протестил в FF, опере, хроме, ie и сафари. Не сработало только в сафари.
Да нет, в ФФ все норм, в Опере почему-то не работает, тестирую в адресной строке прямо: Мне это нужно просто для вызова неопределенных изначально коллбеков аякса...
Как ни странно звучит, но попробуй цикл так задать: Code: for (var i = 0; i < arguments.length; i++) { alert(arguments[i]); } Так у меня заработало и в Сафари (и, кстати, в IE 6,7), а с i in arguments не работало.
Да, верно, аргументс это же не массив, видимо ФФ пофиг на это, а Опере нет... Спасибо за помощь, буду разбираться дальше, а вообще стукни завтра на асю 352223797, есть разговор.