Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   как вызвать уже имеющийся метод, но хитрым способом? (http://www.flasher.ru/forum/showthread.php?t=20552)

УильямБрэдберри 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

может, кто-то мне объяснит, почему евал() всем так не нравится? Ответ "не модно" не катит...

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


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

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