Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
as3_learning.pdf
Скачиваний:
46
Добавлен:
21.05.2015
Размер:
1.8 Mб
Скачать

ИЗУЧЕНИЕ ACTIONSCRIPT 3.0

96

Объектно-ориентированное программирование на языке ActionScript

class StaticTest

{

static var message:String = "static variable"; var message:String = "instance variable";

}

// In your script

var myST:StaticTest = new StaticTest(); trace(StaticTest.message); // output: static variable trace(myST.message); // output: instance variable

Атрибуты свойств классов

Когда речь идет об объектной модели ActionScript, термин свойство обозначает все, что может быть членом класса, включая переменные, константы и методы. Однако в справочной документации Adobe ActionScript 3.0 для платформы Adobe Flash Platform данный термин используется в более узком смысле. В этом контексте термин «свойство» включает только члены класса, которые являются переменными или определены в методе установки или получения. В ActionScript 3.0 имеется набор атрибутов, которые могут использоваться с любым свойством класса. Эти атрибуты перечислены в следующей таблице.

Атрибут

Определение

 

 

internal (по умолчанию)

Видимый для ссылок внутри того же пакета.

 

 

private

Видимый для ссылок в том же классе.

 

 

protected

Видимый для ссылок в том же классе и в производных классах.

 

 

public

Видимый для всех ссылок.

 

 

static

Показывает, что свойство принадлежит классу, а не экземплярам класса.

 

 

UserDefinedNamespace

Имя пространства имен, определенное пользователем.

 

 

Атрибуты пространства имен для управления доступом

ActionScript 3.0 обеспечивает четыре специальных атрибута для управления доступом к свойствам, определенным внутри класса: public, private, protected и internal.

Атрибут public делает свойство видимым во всем сценарии. Например, чтобы сделать метод доступным для кода за пределами пакета, необходимо объявить его с атрибутом public. Это относится ко всем свойствам независимо от того, с использованием каких ключевых слов они объявлены: var, const или function.

Атрибут private делает свойство видимым только для вызывающих методов внутри определяющего класса данного свойства. Это поведение отличает его от атрибута private в ActionScript 2.0, который разрешал подклассу доступ к закрытому свойству суперкласса. Другое значительное изменение поведение имеет отношение к доступу во время выполнения. В ActionScript 2.0 ключевое слово private запрещало доступ только во время компиляции, а во время выполнения этот запрет можно было легко обойти. В ActionScript 3.0 это уже не удастся. Свойства, помеченные атрибутом private, остаются недоступными как во время компиляции, так и во время выполнения.

Например, следующий код создает простой класс с именем PrivateExample с одной закрытой переменной, а затем к этой переменной пытается обратиться внешний метод.

Последнее обновление 12.5.2011.

ИЗУЧЕНИЕ ACTIONSCRIPT 3.0

97

Объектно-ориентированное программирование на языке ActionScript

class PrivateExample

{

private var privVar:String = "private variable";

}

var myExample:PrivateExample = new PrivateExample(); trace(myExample.privVar);// compile-time error in strict mode

trace(myExample["privVar"]); // ActionScript 2.0 allows access, but in ActionScript 3.0, this is a run-time error.

ВActionScript 3.0 попытка обращения к свойству с помощью оператора «точка» (myExample.privVar) приведет к ошибке компиляции, если используется строгий режим. В противном случае ошибка появляется во время выполнения, как и в случае использования оператора доступа к свойству (myExample["privVar"]).

Вследующей таблице подведены результаты попыток обращения к закрытому свойству, которое принадлежит статическому (не динамическому) классу.

 

Строгий режим

Стандартный режим

 

 

 

оператор «точка» (.)

ошибка компиляции

ошибка выполнения

 

 

 

оператор «квадратные скобки» ([])

ошибка выполнения

ошибка выполнения

 

 

 

В классах, объявленных с использованием атрибута dynamic, попытки обращения к закрытым свойствам не приведут к ошибкам выполнения. Переменная не является видимой, поэтому возвращается значение undefined. Однако ошибка компиляции возникает, если в строгом режиме используется оператор «точка». Следующий пример похож на предыдущий и отличается от него только тем, что класс PrivateExample объявляется с атрибутом dynamic.

dynamic class PrivateExample

{

private var privVar:String = "private variable";

}

var myExample:PrivateExample = new PrivateExample(); trace(myExample.privVar);// compile-time error in strict mode trace(myExample["privVar"]); // output: undefined

Динамические классы обычно возвращают значение undefined вместо ошибки, когда внешний код пытается обратиться к закрытому свойству класса. В следующей таблице показано, что ошибка выдается, только когда оператор «точка» используется для обращения к закрытому свойству в строгом режиме.

 

Строгий режим

Стандартный режим

 

 

 

оператор «точка» (.)

ошибка компиляции

undefined

 

 

 

оператор «квадратные скобки» ([])

undefined

undefined

 

 

 

Атрибут protected, впервые введенный в версии ActionScript 3.0, делает свойство видимым для вызывающих методов собственного класса или подкласса. Другими словами, защищенное свойство доступно для собственного класса и подклассов, находящихся под ним в иерархии наследования. Оно доступно даже для подклассов, находящихся в других пакетах.

Последнее обновление 12.5.2011.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]