Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как динамически изменять выполняемую функцию? (http://www.flasher.ru/forum/showthread.php?t=146288)

NAO111 03.11.2010 12:49

Как динамически изменять выполняемую функцию?
 
Доброго времени суток!

Подскажите пожалуйста, как передать ФУНКЦИЮ в качестве ПАРАМЕТРА другой функции.

Передать в качестве параметра нужно именно ФУНКЦИЮ, а не результат её работы.

Спасибо!

3p.station 03.11.2010 13:11

Код AS3:

private function someFunction(value:String):void{trace(value);}
 
private function recvFunction(value:Function):void{value("kuku");}
 
recvFunction(someFunction);
 
///// kuku

ууупс. думал что я в разделе 3 скрипта. для 2-го - не знаю никогда не юзал... но возможно, что этот вариант тоже подойдет.

mooncar 03.11.2010 13:31

Код AS1/AS2:

test(1, func1);
test(2, func2);
test(100);
 
function test(n:Number, doAfter:Function)
{
        if (n == 1 || n == 2)
        {
                doAfter(n);
        }
        else
        {
                trace('Стоп');
        }
}
 
function func1(n:Number)
{
        trace('Выполняется первая функция, n = ' + n)
}
 
function func2(n:Number)
{
        trace('Выполняется вторая функция, n = ' + n)
}


NAO111 03.11.2010 14:10

а можно эту полученную в качестве параметра функцию не вызывать сразу, а "отложить", записать в переменную типа Function и потом вызвать через переменную?
У меня не получается чё то(

mooncar 03.11.2010 14:20

Возможно у вас проблемы с областями видимости - в какую именно переменную вы записываете ссылку на функцию-параметр - в локальную по отношению к основной функции или нет?

Вот так все работает:
Код AS1/AS2:

var someFunc:Function ;
 
test(1, func1);
trace(someFunc); //будет определена
 
function test(n:Number, doAfter:Function)
{
        if (n == 1 || n == 2)
        {
                someFunc = doAfter;
        }
        else
        {
                trace('Стоп');
        }
}
 
function func1(n:Number)
{
        trace('Выполняется первая функция, n = ' + n)
}


NAO111 03.11.2010 14:38

спасибо)

Код AS1/AS2:

public var main_function:Function;
 
public function setAllProp(func:Function):Void {
 
                main_function = func;
                main_function()      // тут работает
 
        }
 
public function doMainFunc() {
                main_function();      // тут уже не работает, а надо чтобы работало..
        }


mooncar 03.11.2010 14:45

Цитата:

//тут уже не работает, а надо чтобы работало..
Так запустите doMainFunc.
Причем только в момент не ранее, чем будет определена main_function.

NAO111 03.11.2010 15:10

конешно я запускаю, далле, по нажатию кнопки... но ничего(


Часовой пояс GMT +4, время: 21:30.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.