PDA

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


darksranger
31.08.2008, 23:54
на самом деле код такой
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
чем плох 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
Гдето читал что eval() хоть и древний, но выполняется значительно быстрее конструкций типа this["bla_bla" + someWhat].

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

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

Угу, конечно:
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, и добавлять его туда скорее всего не будут =)