Руководство по actionscript. часть 2, стр. 116
Если функция переменной экземпляра объекта присваивается внутри класса данного объекта, то она сможет обращаться к переменным и методам объекта, объявленным с использованием модификаторов управления доступом private, protected, internal и public. Если присваивание происходит внутри подкласса класса объекта, функция сможет обращаться только к тем переменным и методам объекта, которые объявлены с использованием модификаторов управления доступом protected, internal и public. Если присваивание происходит внутри пакета, в котором объявлен класс объекта, функция сможет обращаться только к переменным и методам объекта, объявленным с использованием модификаторов управления доступом internal и public. Если класс объекта объявлен в одном пакете, а присваивание происходит в другом пакете, функция сможет обращаться только к переменным и методам объекта, объявленным с использованием модификатора управления доступом public.
Например, рассмотрим следующий код, который создает динамический класс
Employee:
dynamic public class Employee { public var startDate:Date; private var age:int;
}
Следующий код присваивает функцию динамической переменной экземпляра doReport экземпляра класса Employee. Присваивание происходит за пределами класса Employee, но внутри класса, который объявлен в том же пакете, что и класс Employee. Следовательно, функция может обращаться только к тем переменным объекта Employee, которые объявлены с использованием модификаторов управления доступом internal й public. Переменные, объявленные с использованием модификаторов управления доступом protected и private, недоступны для этой функции.
public class Report { public function Report (employeeEmployee) { // Присваиваем функцию переменной doReport employee. doReport = function ( ):void { trace(this. startDate); // Обращение к public-переменной допустимо trace(this. age); // Обращение к private-переменной запрещено
Динамические обращения к переменным и методам
Поскольку имена динамических переменных экземпляра зачастую неизвестны вплоть до этапа выполнения программы, язык ActionScript предоставляет возможность указывать имя переменной с помощью обычного строкового выражения. Следующий код демонстрирует общий подход:
некийОбъект\_некоеВыражение]
В предыдущем коде некийОбъект — это ссылка на объект, к переменной которого происходит обращение, а некоеВыражение — любое выражение, возвращающее строку (которая обозначает имя переменной). Предыдущий код может применяться как для присваивания значения переменной, так и для получения значения.
Например, следующий код присваивает значение «Toronto» переменной, имя которой указывается с помощью выражения строкового литерала «city»:
var info:Object = new Object( ); info["city"] = «Toronto»;
Следующий код присваивает значение «Canada» переменной, имя которой указывается с помощью выражения строкового литерала «country»: info["country"] = «Canada»;
Следующий код получает значение переменной, имя которой указывается с помощью выражения-идентификатора detail:
var detail-.String = «city»; trace(info[detail]); // Выводит: Toronto
Когда среда выполнения Flash встречает код info [detail], она сначала определяет значение переменной detail (в нашем случае это «city»), после чего ищет переменную с именем «city» в объекте, на который ссылается переменная info.