Javascript - str переменная и вызов ф-ии с ее значением

Тема в разделе "Другие языки", создана пользователем bueno, 29 янв 2008.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. bueno

    bueno Читатель

    Заблокирован
    Регистр.:
    7 май 2007
    Сообщения:
    236
    Симпатии:
    69
    собственно нужно осмыслить след. механизм:

    есть функция bar(), выдающая, скажем, какой-нить алерт (напр. alert(1))..
    есть переменная, скажем, foo = 'bar'

    функций может быть много и разных.. так вот, нужно по имени строковой переменной вызвать функцию.. по желательно с возможностью передачи параметров.. т.е., в данно случае что то вроде
    Код:
    function bar(){ alert(1) }
    foo = 'bar';
    foo();
    
    на выходе сообщение (алерт)..

    в принципе можно использовать eval, но не хочется.. может есть какой ииной способ выкрутиться.. например как в php.
    PHP:
    function bar(){ echo 'message'; }
    $foo 'bar';
    $foo();
     
  2. mentanos

    mentanos Постоялец

    Регистр.:
    27 дек 2007
    Сообщения:
    128
    Симпатии:
    35
    Код:
    <script>
    // function to test on
    function sum() {
    	rz = 0;
    	for (i=1; i<arguments.length; i++) {
    		rz += arguments[i];
    	}
    	alert(arguments[0]+' = '+rz);
    }
    
    // arguments: func, arg1, arg2, ...
    // func = function name to call
    // argX - number|string
    function do_call( func) {
    	var n = arguments.length;
    	var t = [];
    	
    	for (i=1; i<n; i++) { // skip arguments[1] = func
    		arg = arguments[i];
    		t[i-1] = (typeof(arg)).toLowerCase()=='number'?arg:'"'+arg+'"';
    	}
    
    	setTimeout(func+'('+t.join(',')+')',0);
    }
    
    do_call('sum','Math: a girl = 90+60+90',90,60,90);
    </script>
     
    bueno нравится это.
  3. bueno

    bueno Читатель

    Заблокирован
    Регистр.:
    7 май 2007
    Сообщения:
    236
    Симпатии:
    69
    гм..
    прикольно..
    спасибо..

    признаться мне даже и в голову не пришло использовать setTimeout.. а какие еще в js есть callback функции (желательно кроссбраузерные)?..
     
  4. mentanos

    mentanos Постоялец

    Регистр.:
    27 дек 2007
    Сообщения:
    128
    Симпатии:
    35
    больше ничего вразумительного на ум не приходит
     
  5. Karlasan

    Karlasan Постоялец

    Регистр.:
    7 дек 2007
    Сообщения:
    126
    Симпатии:
    195
    а так не проще:
    Код:
    <script>
    function test(a,b)
    {
    	alert(a+b); //выдает алерт с суммой параметров
    }
    
    n=test;
    n(1,2); //выдаст 3
    </script>
    
     
  6. mentanos

    mentanos Постоялец

    Регистр.:
    27 дек 2007
    Сообщения:
    128
    Симпатии:
    35
    читаем внимательно первый пост
     
Статус темы:
Закрыта.