Форум 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)
-   -   преобразование текста в объект. (http://www.flasher.ru/forum/showthread.php?t=65820)

Sem3D 20.06.2005 18:49

преобразование текста в объект.
 
Как можно (и можно ли) преобразовать текст в объект?
Например:
Есть объект DinamicText c именем "MyText1".
Есть текстовая переменная MyName.
Можно ли сделать типа такого:
var MyName = "MyText1";
MyObj = MyName; // ???
MyObj.text = "Мой текст";
MyObj._x = 100;

Т.е. в текстовую переменную заношу имя реального объекта,
а потом с ним делаю что мне нужно.

Может есть другой вариант?
Мне нужно, чтобы можно было работать только с одним объектом (MyObj),
название которого я беру из текстовой переменной MyName.

fiza 20.06.2005 19:54

MyObj = eval(MyName);

silin 20.06.2005 20:30

MyObj = this[MyName];

fiza 20.06.2005 20:53

а вдруг не this а _level0.mamaDorogaya.rodiMenyaObratno ?

silin 20.06.2005 20:58

тогда беда.. :)
или _level0.mamaDorogaya.rodiMenyaObratno[MyName]
зы: к eval сложилось какое-то негативное отношение, почему, правда, не могу до сих пор понять..

Nirth 20.06.2005 21:09

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

silin 20.06.2005 21:44

хотелось все же понять какое дело директива компилятора может зверски тормозить
к слову, тесты показывают примерно одинаковую скорость доступа через eval и []
Код:

this.createEmptyMovieClip("myMc",0)
for(var i=10000,t=getTimer();i--; )eval("myMc").x=i;
trace(getTimer()-t);//100,103,99
for(var i=10000,t=getTimer();i--; )this["myMc"].x=i;
trace(getTimer()-t);//106,108,107


Nirth 20.06.2005 21:47

я на паре сайтов, видел бенчмарки где ивал уступал, но сам не проводил, вроде одна статья даже на русском была

а насчет деректива и тормоза, я не строил цепочек, наверное не так высказался, просто использовать дерективы в рантайме, кажеться чуть чуть извратом.

Штрек 20.06.2005 22:13

Цитата:

Сообщение от Nirth
ивал это деректива компилятора, которая зверски все это дело тормозит.
вобщем ее лучше не юзать если не припрет.

У Гурского с точностью до наоборот:
"Выигрыш в производительности можно получить, если использовать для переопределения переменных и свойств предложение set, а для чтения их значений – функцию eval()...."

Nirth 20.06.2005 22:17

О вспомнил где статью на русском видел
http://www.initclip.com/articles/0000004/
Цитата:

Самый громоздкий доступ выполняется через команду "eval()". Эта функция позволяет на лету по строковому имени создавать доступ к любым переменным (объектам, клипам и т.д.), что требует достаточно много времени. Поэтому даже самый оптимально написанный код с eval() всегда будет около двух раз уступать по производительности доступу через массив или точку, поэтому последний хорошая ему альтернатива. Это относится и для применения команд set, get, setProperty, getProperty - выполнение которых занимает довольно много времени. В связи с этим рекомендуется отказаться или максимально ограничить использование таких функций в коде и пользоваться исключительно доступом через точку.
и в догонку
Цитата:

Доступ через массив - _root["test_mc"], равнозначен "dot"-нотации по скорости выполнения.

Штрек 20.06.2005 22:43

Цитата:

Сообщение от Nirth
О вспомнил где статью на русском видел
http://www.initclip.com/articles/0000004/

Ну и почитал бы комментарии к этой статье ......
Аргументы Гурского более чем убедительны -

Например, следующая строчка
set(clip1.clip2.clip3.prop, “Привет”);
будет скомпилирована в 2 команды Flash-ассемблера:
push 'clip1.clip2.clip3.a', 'Привет'
setVariable
Если использовать операторы доступа к свойствам
clip1.clip2.clip3.a="Привет";
то команд будет целых 8:
push 'clip1'
getVariable
push 'clip2'
getMember
push 'clip3'
getMember
push 'a', 'Привет‚'
setMember

iNils 20.06.2005 23:27

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

ЗЫ: эту же статью и читал :p

Nirth 21.06.2005 00:37

скачал декомпилер, проверил стэк оригинально...

Sem3D 21.06.2005 11:25

Вчера нашел такую вещь:
var MyName = "MyObject";
_root[MyName].text = "Мой текст";

(тоже самое предложил silin)

Меня это устраивает.
Всем большое спасибо!


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

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