Форум 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)
-   -   some_mc.someAction = someFunction как задать динамическое имя someFunctoin ? (http://www.flasher.ru/forum/showthread.php?t=115482)

darksranger 31.08.2008 23:54

some_mc.someAction = someFunction как задать динамическое имя someFunctoin ?
 
на самом деле код такой
Код:

bm.onPress = mainonPress
пробовал задавать так

Код:

mainonPress = function () {
trace("1")
}
somePeremen = "main"
bm.onPress = somePeremen+"onPress"

не работает
как задать динамическое название функции

BBOY Ильич 01.09.2008 00:00

eval()

darksranger 01.09.2008 00:13

BBOY Ильич спс

etc 01.09.2008 02:16

Код:

bm.onPress = this[somePeremen+"onPress"];
Забудьте про eval.

darksranger 01.09.2008 02:27

спасибо я думал что eval не выход но забыл про this

BBOY Ильич 01.09.2008 09:13

чем плох eval()?

Psycho Tiger 01.09.2008 09:46

Тем же, чем и плохо писать код на кнопках. Не солидно ;)

etc 01.09.2008 10:21

Цитата:

Сообщение от BBOY Ильич (Сообщение 761542)
чем плох eval()?

Потому что он древний, как бивни мамонта, пришел ещё из четверки. Тем более, не позволяет создавать переменные с составным именем.

BBOY Ильич 01.09.2008 17:11

спс =)

Mur4ik 05.09.2008 02:36

Гдето читал что eval() хоть и древний, но выполняется значительно быстрее конструкций типа this["bla_bla" + someWhat].

to __etc:
И он таки позволяет создавать переменные с "составным именем" ) :

eval ("var" + i) = "someWhat"; равносильно this["var"+i] = "someWhat";

etc 05.09.2008 14:30

Цитата:

Сообщение от Mur4ik (Сообщение 762405)
Гдето читал что eval() хоть и древний, но выполняется значительно быстрее конструкций типа this["bla_bla" + someWhat].

to __etc:
И он таки позволяет создавать переменные с "составным именем" ) :

eval ("var" + i) = "someWhat"; равносильно this["var"+i] = "someWhat";

Угу, конечно:
Цитата:

Сообщение от Compiler Errors
Location: Scene=Scene 1, layer=Layer 1, frame=1, Line
Description: Left side of assignment operator must be variable or property.
Source: eval ("var" + i) = "someWhat";

Работает оно так только в пятом флеше и всё. И eval вовсе не быстрее:

Код:

this.createEmptyMovieClip('mc0', 0);
n = 0;
t = getTimer();
for (i = 0;i < 1e6;i++) {
        m = this['mc'+n];
}
trace(getTimer()-t); // 5156
t = getTimer();
for (i = 0;i < 1e6;i++) {
        m = eval('mc'+n);
}
trace(getTimer()-t); // 5109


Mur4ik 05.09.2008 15:59

согласен:
eval ("var" + i) = "someWhat"; не равносильно this["var"+i] = "someWhat";
я в свое время недочитал хелп ;)
"In Flash 5 or later, you cannot use eval() to dynamically set and retrieve the value of a variable or instance name..."

т.е. в 5 и выше уже не работает, сорри...

wvxvw 05.09.2008 16:07

eval() по описанию ECMAScript должен быть вызовом компайлера, т.е. передать строку компайлеру и скомпилировать ее. Т.как у флеша архитектура другая и весь код компилируется до исполнения, а компайлер в плеере вообще отсутствует, то реализация этой функции - в принципе не возможна. Ну и глядя на то, что АС все дальше и дальше уходит от использования ECMAScript - лучше действительно перестать пользоваться тем, что, наверняка не будет реализовано в последующих версиях (eval(), кстати, отсутствует в АС3, и добавлять его туда скорее всего не будут =)


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

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