Рассмотрим ситуацию, в которой часто новички впадают в ступор (как, признаюсь, и я в свое время) — когда нужно вызвать функцию имя которой передается в переменной. Это достаточно просто, если знать что есть такая функция 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