Является ли динамическая переменная наименованием, как это возможно в ActionScript 3?AS3 Динамическая переменная именование
for (var xz=0;xz<10;xz++){
var this['name' + xz]:Number = xz;
}
Является ли динамическая переменная наименованием, как это возможно в ActionScript 3?AS3 Динамическая переменная именование
for (var xz=0;xz<10;xz++){
var this['name' + xz]:Number = xz;
}
Вы должны использовать массив для этого вида списка переменных. Хотя вы можете создавать свойства динамически, вы обычно хотите избежать этого. Особенно в вашем случае, где фактический идентификатор каждой переменной не является String
, а числом. Так почему бы не использовать то, что делает именно это: идентифицировать его элементы по числу? И это именно то, что делает массив.
пример кода:
var xzs:Array = [];
for (var xz:uint = 0; xz < 10; xz++){
xzs.push(xz);
}
Поскольку, например, вы не можете выполнить простой поиск позже. Если у вас есть 20k элементов, и вы хотите получить их, гораздо проще запросить 'this ['xz' + 3176]' (имея в виду, что порядок может быть не гарантирован). –
@ AndreyPopov Я не согласен. 'xzs [3176]' должен работать отлично, и это не сложнее сделать. Учитывая, что существование динамического свойства нельзя проверить во время компиляции, я настоятельно рекомендую работать с массивом. Этот вопрос не о 20k элементах, а 10. – null
Если мы говорим о массиве, использование 'xzs [3176]' сделает массив длины '3177' (из-за 0), с одним элементом в нем. Если мы говорим об объектах - любой тип номера в действительности действительно ** плохой ** - все они все равно преобразуются в строки. –
Да, он уверен - AS3 происходит от ECMA сценария, так что это устанавливает свойство объекта (в данном случае это this
). Таким образом, вы можете динамически устанавливать свойства. Но вы немного ошибаетесь в том, как это сделать - нет необходимости использовать var
, потому что вы не заявляете об этом, вы . Это как с помощью:
this.propertyName = 'value';
Отныне this
будет иметь propertyName
равный 'value
. Поэтому вы должны просто использовать:
this['name' + xz] = xz;
Вот и все!
Редактировать: как указано в BotMaster - если вы используете классы и хотите динамически добавлять свойства, класс должен быть задан как динамический. Большинство из обычно используемых уже являются динамичными (как упоминал Аарон :)). Я не вдавался в подробности, поскольку, как мне кажется, вам просто нужно сделать это на вашей временной шкале. Если нет - укажите это в своем вопросе, чтобы получить более точный ответ, чем этот. То же самое происходит, если ваше новое свойство нужно ввести (не можете думать о какой-либо точке, желающей этого) - вы должны увидеть ответ BotMaster :)
Это не так, только динамический класс может это сделать. – BotMaster
Если 'this' является' MovieClip' (который есть, если это скрипт временной шкалы), то он уже является динамическим классом. – Aaron
Вы оба правы, я просто подумал, что пользователь хочет что-то гораздо более базовое, чем идея BotMaster .. :) –
Короткий ответ: нет, вы не можете объявлять при заданных свойствах времени выполнения.
Длинный ответ: видa.
Если вы хотите создать новые типизированные свойства, вам придется их хранить в векторе <>.
Все остальное позволит вам сделать это, но нетипизированное, динамический класс, магазин в объекте, хранить в массиве, и т.д ...
нет это не так, использование массива или любой другой объект способен хранить другие объекты. – BotMaster