Просмотр полной версии : Синтаксис создания переменной
Подскажите пожалуйста как правильно создать переменную, название которой состоит из нескольких строк.
Примерно вот так:
var m =1;
var "index" + m + "speed" = 0;
Для подобных целей проще всего использовать поля объекта (поправьте меня, если я ошибаюсь):
var settingsObject:Object = {};
settingsObject["some_" + counter + "_var"] = 125;
Но лучше таким не пользоваться. Лучше заведите массив объектов:
var settingsArray:Array = [];
settingsArray[ counter ] = {};
settingsArray[ counter ].someProperty = 125;
iflamberg
03.04.2013, 16:59
Так нельзя. Можно так:
var o:Object = {};
o["index"+m+"speed"] = 0;
Довольно медленно. Желательно использовать просто массивы.
если класс динамический, то можно пихать через this
this["index" + m + "speed"] = 0;
Но как сказали выше, это не очень хорошо, но местами очень удобно.
Александр Мостовой
03.04.2013, 17:30
Декларация переменных создана для четкого регламентирования поведения приложения. Грубо говоря тыкать себя носом что бы не делать того что не задумал. Декларировать переменные с переменными нельзя т.к. это противоречит логике декларации. А вот создать переменную можно.
this["index" + m + "speed"]
хоть и не нужно. При этом она от этого не станет задекларированной: т.е. компилятор вам не даст обратиться к index22speed без квадратных скобок.
На самом деле тип данных MovieClip - динамический, как и Object, например. Это означает что можно динамически создавать переменные (чего не можем делать в Sprite); Компилятор ругается в воспитательных целях.
var thisMC:MovieClip = this as MovieClip;
thisMC.index33speed = 100500;
//Так мы можем обращаться к любым новам переменным без декларации.
Теперь вопрос. Расскажите что вас заставляет избегать использования массива?
iflamberg
03.04.2013, 17:37
Меня обычно заставляют разреженные массивы вида map[x+"_"+y] где не требуется скорость, но иногда требуется пробежаться по всем элементам массива. Удобно.
Александр Мостовой
03.04.2013, 17:46
Это можно сделать вот так:
var array:Array = [];
array[5] = "a";
array[10] = "b";
array[20] = "c";
for (var key:String in array) {
trace(key, array[key]);
}
А, вы имеете ввиду случай DtataGrid например? Ну Adobe тоже практикуют такое в компонентах Flash но я как-то скептически отношусь, хотя может это и быстрее чем какой-нибудь getIndexByXY(x, y)
Всем спасибо, получилось!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.