Приветствую Вас Гость | RSS

Flash. Обо всем по маленьку

Вторник, 23.12.2025, 06:43
Главная » Статьи » Уроки ActionScript

Урок 6-3. Итерация
Итерация – это процесс циклического повторения различных свойств, определенных внутри системы или объекта. В основе ActionScript 2 все явные определения внутри объекта могли быть помещены в цикл с помощью конструкции for..in. Единственный способ предотвратить зацикливание для любого, или всех этих свойств, заключался в использовании недокументированного метода, называемого ASSetPropFlags(). В ActionScript 3 цикл с конструкцией for..in применяется только к динамическим определениям в динамических объектах. Это означает, что внутри любого объекта методы или свойства, определенные классом, не будут видны в процессе итерации, при этом нет способа сделать их видимыми. Можно сделать динамические определения невидимыми для цикла, используя в ActionScript 3 функцию  setPropertyIsEnumerable().

Класс Array – это динамический класс, имеющий нединамические определения. Используя for..in, можно получить доступ только к динамическим определениям внутри этого класса, даже если внутри этого класса по-прежнему существуют другие определения.

// Create a list array

var list:Array = new Array();

list[0] = "bread";

list[1] = "milk";

list.type = "grocery";

// Iterate through properties in list

var prop:String;

for (prop in list) {

 trace(prop + ": " + list[prop]);

}

/* output

0: bread

1: milk

type: grocery

*/

// length is an Array property but not

// enumerable since part of class definition

trace(list.length); // traces 2

// Hide type property from enumeration

list.setPropertyIsEnumerable("type", false);

// length can not be made enumerable

// through setPropertyIsEnumerable

list.setPropertyIsEnumerable("length", true);

for (prop in list) {

 trace(prop + ": " + list[prop]);

}

/* output

0: bread

1: milk

*/

Обратите внимание, что при перечислении длина не может быть найдена, даже если была сделана попытка установить видимость посредством setPropertyIsEnumerable. Это потому, что она является частью определения класса. На самом деле, любая переменная, объявленная с помощью var, рассматривается как часть определения класса. Это означает, что даже переменные, определенные внутри временной шкалы, не будут перечислены для этой временной шкалы.

// var-declared variables do not enumerate

var a:Number = 1;

var b:Number = 2;

for (var prop:String in this){

 trace(prop + ": " + this[prop]);

}

// traces no output

Чтобы сделать переменные временной шкалы перечисляемыми, нужно определить их в качестве динамических свойств. Чтобы проделать это, вам придется определить переменную с использованием this. Тем не менее, динамические переменные, определенные в такой форме, не могут быть типизированы.

// dynamic variables enumerate

this.a = 1;

this.b = 2;

for (var prop:String in this){

 trace(prop + ": " + this[prop]);

}

/* output

b: 2

a: 1

*/
Категория: Уроки ActionScript | Добавил: anti_k (25.02.2010)
Просмотров: 603 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]