[ JS ] Массив -> список аргументов

Discussion in 'PHP' started by |qbz|, 16 Mar 2012.

  1. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Че-то либо я туплю под ночь, либо незнаю решения... Вобщем есть массив и есть функция. Нужно передать функции данный массив как ее аргументы. Количество элементов в массиве мы незнаем. То есть, грубо говоря, нужно из

    Code:
    var a = [123, 234, 345], b = function(){...};
    сделать

    Code:
    b(a[0], a[1], a[2]);
    вот только мы незнаем изначально сколько элементов в "a".

    Вопрос - как вызывать b(), передавая именно столько аргументов, сколько элементов в "а"?
     
  2. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Мсье знает толк в извращениях? :) А почему нельзя массив аргументом передать, а в функции с ним делать уже всё, что угодно?
     
  3. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Нет, мсье, так не пойдет, так как таких функций типа b() будет много, и внутри нужно использовать именно переменную модель, а не модель получения значений переменных из аргумент-массива.

    p.s.: евал не предлагать.
     
  4. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Может, метод apply() поможет реализации столь мудрёной модели?

    Code:
    var a = [123, 234, 345], 
    b = function()
    {	
    	for (i in arguments)
    	{
    		alert(arguments[i]);
    	}
    };
    
    
    b.apply(this, a);
    
     
  5. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Тоже так думал, протести - сам увидишь.

    upd:
    Странно, в Мозилле посмотрел - работает, в Опере - нет.
     
  6. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Протестил. Как и ожидалось, 3 alert'a: 123, 234 и 345.
    Что говорит firebug? Может, вовсе и не в этом месте затык?

    upd:
    протестил в FF, опере, хроме, ie и сафари.
    Не сработало только в сафари.
     
    1 person likes this.
  7. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Да нет, в ФФ все норм, в Опере почему-то не работает, тестирую в адресной строке прямо:


    Мне это нужно просто для вызова неопределенных изначально коллбеков аякса...
     
  8. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Как ни странно звучит, но попробуй цикл так задать:

    Code:
    for (var i = 0; i < arguments.length; i++)
    	{
    		alert(arguments[i]);
    	}
    
    Так у меня заработало и в Сафари (и, кстати, в IE 6,7), а с i in arguments не работало.
     
  9. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Да, верно, аргументс это же не массив, видимо ФФ пофиг на это, а Опере нет...

    Спасибо за помощь, буду разбираться дальше, а вообще стукни завтра на асю 352223797, есть разговор.