PDA

Просмотр полной версии : как вызвать уже имеющийся метод, но хитрым способом?


УильямБрэдберри
20.09.2001, 20:34
var funName=["a","b","trace"]

function a()
{
trace("a")
}
function b()
{
trace("b")
}


function a_b()
{
_root[funname[0]]();
_root[funname[1]]();
_root[funname[2]]();
}

0 и 1 работает, а вот 2 никак :(

запутался я чей-то

gOloVasTicK '~
20.09.2001, 20:37
Дык а трейсить то чего? Ты ж флашу сказал _root.trace :)

УильямБрэдберри
20.09.2001, 20:45
сорри
просто скопировал строки


funname[2]();

но все-рно не работает

хоть как мучаюсь

УильямБрэдберри
20.09.2001, 21:00
все,
просто непонятно чъим методом является трэйс
зато плэй и стоп работает.

а мне тока это и надо

всем пасибо.

ЗЫ: кто до трэйса докопается, тому отдельное спасибо =)

Suhoff
21.09.2001, 02:48
Нужно вызывать так - eval(funName[2])(), тогда должно работатать.
н.р. следующий фрагмент - работает:
foo="trace";
eval(foo)(foo);
:)

сочиNetz
21.09.2001, 02:49
а по-моему дело в том, что трейс требует наличия параметра. Если сделать просто trace() флеш ругнется на тему того, что ф-ция requires exactly one parameter. Здесь параметров не передается.
Однако если сделать _root[funname[2]]('param') то тоже ничего не происходит.
Вывод: глюк реализации. Очередная недоработка объектной модели.

хехе.. однако нет. Если сделать
function a(par){trace(par)} a потом funname[0]('qwer'), выдаст qwer

Темный лес это ООП во флеше. Ну его в баню до выхода шестого :)

Suhoff
21.09.2001, 03:09
........ Да, кстати......
Чтобы вызвать функции более хитрым способом нужно сделать немного не так - а следующим образом:
.........
function a() {
......
};
function b() {
......
};
....
var funNum=[];
funNum[0]=eval("a");
funNum[1]=eval("b");
funNum[2]=eval("trace");
или, например :
funNum[3]=eval("Math.sin"); // или другие функции

тогда можно вызывать фунции так -
funNum[0]();
funNum[1]();
funNum[2](.......);
или н.р.
funNum[2](funNum[3](1)); !!!!!

и всё должно работать!! :)

УильямБрэдберри
21.09.2001, 03:46
Пасиб =)

foo="trace";
eval(foo)("YO");

работает, вот, блин гадство.
ненавижу евалом пользоваться :)

Suhoff
22.09.2001, 01:13
:)
Если ненавидишь пользоваться eval-ом, то можно обойтись и без него..
Пишешь -

foo=trace;
foo("YO");

- тоже работает!! :)
Удачи!

[subway]design
05.12.2001, 18:07
может, кто-то мне объяснит, почему евал() всем так не нравится? Ответ "не модно" не катит...

Мне лично нравится, всегда им пользуюсь.

lexass
06.12.2001, 11:03
2[subway]design
ИМХО
Иногда без евала не обойтись :(
А большое их кол-во, работает не оч. быстро :mad:
По ентой причине он мне тоже не нравиться :(
ЗЫ
Хотя eval() :cool: :cool: :cool: :cool: :cool:

[subway]design
06.12.2001, 19:29
понял, спасибо. Но я сейчас обнаружил, что АС не различает размер символов в именах переменных, а я хотел так сделать:

A_x= new Array(0, 8.85, 14.5, 18, 21.2, 22.85, 24.15, 25, 25.8, 26.3, 27.4, 28.75, 30.1, 30.9, 28.5, 26.6, 24.2, 22.6, 21.25, 18.55, 15.35, 9.95, 6.45, 3.8);
A_y= new Array(51.05, 38.4, 29.3, 20.95, 11, 5.65, 0, 9.95, 17.45, 21.75, 29.3, 36.8, 44.6, 51.05, 41.35, 39.2, 37.6, 36.8, 36, 34.9, 34.1, 33.05, 32.5, 32.5);

a_x= new Array(22.7, 18.3, 16.15, 12.25, 8.1, 4.85, 4.05, 4.7, 5.8, 11, 16.4, 21.25, 25.1, 26.75, 25.1, 23.25, 22.3, 21.9, 21.75, 22.3, 23.1, 25, 27.95, 34.4, 40.3, 43.5);
a_y= new Array(32, 31.7, 32.25, 34.95, 38.95, 43.15, 46.65, 47.15, 47.3, 45.15, 41.95, 38.45, 34.95, 33.85, 37.25, 40.45, 42.75, 44.5, 45.95, 47.3, 47.7, 47.95, 47.45, 46.1, 44.9, 44.2);

а он рисует маленькую а

кстати, это большая и маленькая буквы а в массиве для прорисовки, можете пользоваться.