Просмотр полной версии : 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 Ильич спс
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
Тем же, чем и плохо писать код на кнопках. Не солидно ;)
чем плох eval()?
Потому что он древний, как бивни мамонта, пришел ещё из четверки. Тем более, не позволяет создавать переменные с составным именем.
BBOY Ильич
01.09.2008, 17:11
спс =)
Гдето читал что eval() хоть и древний, но выполняется значительно быстрее конструкций типа this["bla_bla" + someWhat].
to __etc:
И он таки позволяет создавать переменные с "составным именем" ) :
eval ("var" + i) = "someWhat"; равносильно this["var"+i] = "someWhat";
Гдето читал что 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
согласен:
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 и выше уже не работает, сорри...
eval() по описанию ECMAScript должен быть вызовом компайлера, т.е. передать строку компайлеру и скомпилировать ее. Т.как у флеша архитектура другая и весь код компилируется до исполнения, а компайлер в плеере вообще отсутствует, то реализация этой функции - в принципе не возможна. Ну и глядя на то, что АС все дальше и дальше уходит от использования ECMAScript - лучше действительно перестать пользоваться тем, что, наверняка не будет реализовано в последующих версиях (eval(), кстати, отсутствует в АС3, и добавлять его туда скорее всего не будут =)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.