![]() |
Как лучше создавать динамическое имя переменной
Есть строчка
Код AS1/AS2:
Код AS1/AS2:
|
Лучше закэшировать значения и обращаться по ссылке.
Код AS1/AS2:
Из ваших вариантов выбрал бы первый. |
А можете подробнее про злые ситуации написать. В чём может быть злоупотребление и чем это грозит.
|
В большинстве случаев это просто для удобства. Ну а вообще динамический доступ, да и вообще обращение к чему-либо через точку (точка - это тоже оператор) затребует больше ресурсов, чем обращение к заранее закэшированым ссылкам.
Для наглядного примера можете такое у себя попробовать: Код AS1/AS2:
Еще можно ссылки на клипы не просто перечислением var clip_1 = ... создавайть, а, например, в массив загонять для удобства. Иными словами, чем больше операций происходит для доступа к камому-либо полю, тем хуже. Код AS1/AS2:
|
Тест дал:
2990 и 2305 Могли бы подсказать, что значат фигурные скобки после = ? И немножко подробнее скрипт расписать. Мы в первом таймере один миллион переменных присваиваем?)))))) |
dkart01, фигурные скобки — это новый объект. То есть можно написать "{}", а можно и "new Object()". Аналогично можно и с массивами — вместо "new Array()" писать "[]".
В приведеном коде я создаю структуру, — у объекта "a" есть свойтво "b", тоже объект. У которого, в свою очередь, есть войство "c", которое тоже является объектом и т.д. И в итоге у свойства "f" (объекта) я создаю поле "someProp", равное 15. Далее для теста я записываю в переменную t текущее значение таймера (таймер в миллисекундах и считается от начала запуска флэшки). Потом в цикле от 0 до 1000000 (миллион итераций) я прибавляю к переменной "s" значение "someProp" у объекта "f", при этом осуществляя прямой доступ к этому значение, то есть по "a.b.c.d.e.f.someProp". После выполнения цикла вывожу разницу между текущим значением таймера и тем, что я записал еще до начала цикла. Таким образом я получаю время в миллисекундах, потраченое на выполнение этого кусочка кода. Аналогично и во втором тесте, только там я предварительно закэшировал структуру объектов в отдельную ссылку "q" и в цикле уже обращаюсь через "q.someProp". Разница в значениях потраченого времени из-за того, что в первом случае используется прямой доступ, а во втором — по ссылке. Если написать третий тест еще и с динамическим доступом, то его результаты будут самыми плохими. |
Здорово. Очень хороший пример!
Можно попросить вас помочь с объектами (пример ниже). Один из случаев применения - кэширование, а какие еще могут быть применения таким объектам? Мувиклип - частный случай объекта? Код AS1/AS2:
|
Хм. Считайте, что объект (new Object() я имею в виду) — это просто хранилище для свойств и методов. Мувиклип — это тоже объект, только визуальный. Меняя свойство "_x" у объекта-мувиклипа, вы увидете изменение положения графики на экране. Вообще все в экшенскрипте основывается на объектах.
Применений множество для объектов. Я только некоторые случаи могу привести, которые сходу на ум приходят. 1. Использование объекта в качестве аргумента для функции в случае, если количество необходимых аргументов непредсказуемо: Код AS1/AS2:
Код AS1/AS2:
Так же можно перебирать все свойства объекта в цикле: Код AS1/AS2:
Добавлено через 2 минуты Код AS1/AS2:
|
| Часовой пояс GMT +4, время: 19:04. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.