2015-06-11 2 views
0

Является ли динамическая переменная наименованием, как это возможно в ActionScript 3?AS3 Динамическая переменная именование

for (var xz=0;xz<10;xz++){ 
    var this['name' + xz]:Number = xz; 
} 
+0

нет это не так, использование массива или любой другой объект способен хранить другие объекты. – BotMaster

ответ

0

Вы должны использовать массив для этого вида списка переменных. Хотя вы можете создавать свойства динамически, вы обычно хотите избежать этого. Особенно в вашем случае, где фактический идентификатор каждой переменной не является String, а числом. Так почему бы не использовать то, что делает именно это: идентифицировать его элементы по числу? И это именно то, что делает массив.

пример кода:

var xzs:Array = []; 
for (var xz:uint = 0; xz < 10; xz++){ 
    xzs.push(xz); 
} 
+0

Поскольку, например, вы не можете выполнить простой поиск позже. Если у вас есть 20k элементов, и вы хотите получить их, гораздо проще запросить 'this ['xz' + 3176]' (имея в виду, что порядок может быть не гарантирован). –

+2

@ AndreyPopov Я не согласен. 'xzs [3176]' должен работать отлично, и это не сложнее сделать. Учитывая, что существование динамического свойства нельзя проверить во время компиляции, я настоятельно рекомендую работать с массивом. Этот вопрос не о 20k элементах, а 10. – null

+0

Если мы говорим о массиве, использование 'xzs [3176]' сделает массив длины '3177' (из-за 0), с одним элементом в нем. Если мы говорим об объектах - любой тип номера в действительности действительно ** плохой ** - все они все равно преобразуются в строки. –

0

Да, он уверен - AS3 происходит от ECMA сценария, так что это устанавливает свойство объекта (в данном случае это this). Таким образом, вы можете динамически устанавливать свойства. Но вы немного ошибаетесь в том, как это сделать - нет необходимости использовать var, потому что вы не заявляете об этом, вы . Это как с помощью:

this.propertyName = 'value'; 

Отныне this будет иметь propertyName равный 'value. Поэтому вы должны просто использовать:

this['name' + xz] = xz; 

Вот и все!

Редактировать: как указано в BotMaster - если вы используете классы и хотите динамически добавлять свойства, класс должен быть задан как динамический. Большинство из обычно используемых уже являются динамичными (как упоминал Аарон :)). Я не вдавался в подробности, поскольку, как мне кажется, вам просто нужно сделать это на вашей временной шкале. Если нет - укажите это в своем вопросе, чтобы получить более точный ответ, чем этот. То же самое происходит, если ваше новое свойство нужно ввести (не можете думать о какой-либо точке, желающей этого) - вы должны увидеть ответ BotMaster :)

+1

Это не так, только динамический класс может это сделать. – BotMaster

+1

Если 'this' является' MovieClip' (который есть, если это скрипт временной шкалы), то он уже является динамическим классом. – Aaron

+0

Вы оба правы, я просто подумал, что пользователь хочет что-то гораздо более базовое, чем идея BotMaster .. :) –

0

Короткий ответ: нет, вы не можете объявлять при заданных свойствах времени выполнения.

Длинный ответ: видa.

Если вы хотите создать новые типизированные свойства, вам придется их хранить в векторе <>.

Все остальное позволит вам сделать это, но нетипизированное, динамический класс, магазин в объекте, хранить в массиве, и т.д ...

Смежные вопросы