Как вызвать именованную callback функцию в ActionScript

Рассмотрим ситуацию, в которой часто новички впадают в ступор (как, признаюсь, и я в свое время) — когда нужно вызвать функцию имя которой передается в переменной. Это достаточно просто, если знать что есть такая функция eval.

Сначала простой вариант:

function func() {
   trace('Выполнено');
}
var funcName:String = 'func';
eval(funcName)();

Теперь посложнее — пусть нам нужно вызвать эту фукнцию с параметром, да к тому же из метода класса. Чтобы обратится к функции расположенной вне класса, нужно использовать префикс _root.

Функция и вызов метода класса:

function func(val) {
   trace('Выполнено. Параметр: ' + val);
}
var myClass:MyClass = new MyClass();
myClass.callFunc('func');

Класс:

class MyClass {
   public function MyClass() {}
   public function callFunc(funcName) {
      var v:String = 'параметр';
      _root[eval(funcName)(v)];
   }
}

Вот и все — надеюсь, я ответил на ваши вопросы.

Комментарии

_root[eval(funcName)(v)];

разве не
_root[eval(funcName)](v);
?

А можно поинтересоваться?
Есть, например, 2 функции.
Как их обеих можно вызывать рандомно?
Спасибо.

function func0(){
//действия
}
function func1(){
//действия
}
var fName:String = 'func' + Math.floor(Math,random() * 2 - 0.1);
eval(fName);

как-то так

ой, не Math,random а Math.random