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

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

Среда, 24.12.2025, 02:30
Главная » Статьи » Уроки ActionScript

Урок 10. типы данных
Начиная с ActionScript 2, ActionScript поддерживал строгий тип данных. Это позволяет разработчикам определить, какие типы данных будут иметь разные переменные. Например, если вы пытаетесь использовать переменную с типом String в методе, который ожидает аргумент типа Number, флеш выдаст ошибку.
 
var str:String = "string";
function doubleNumber(num:Number):Number {
 return num*2;
}
doubleNumber(str); // Error: Type mismatch

В ActionScript 2, задание типов данных использовалось только для проверки ошибок во время компиляции. После компиляции вся информация о типах удалялась, и никакие ошибки специфических типов не распознавались.
 
Примечание: Когда тип сохраняется для ActionScript 2 
Единственное исключение в ActionScript 2, где информация о типах остается для операций при прогоне, связано с выражениями try..catch..finally.

С другой стороны, ActionScript 3 поддерживает не только проверку типа при компиляции, но также проверку типа при прогоне. Если в ActionScript 3 во время прогона обнаруживается конфликт типов, будет выдана ошибка при выполнении. В общем, это хорошая штука. Но также иногда может потребоваться принудительное изменение типа переменной для предотвращения необоснованных ошибок.

Что касается ActionScript 3, то здесь существует гораздо больше видов объектов или классов. Взять, к примеру, класс MovieClip, который сейчас наследует от Sprite, DisplayObjectContainer, InteractiveObject, DisplayObject, EventDispatcher и Object. В ActionScript 2, MovieClip наследовал только от класса Object. Это означает, что сейчас MovieClip может использоваться как значение для любой переменной с любым из этих типов, так как в дополнение к тому, что MovieClip является экземпляром, экземпляры MovieClip также являются экземплярами этого типа (так как они – унаследованные типы). 

var container:DisplayObject = new MovieClip(); // OK

Хорошим примером этого является свойство parent класса DisplayObject. Оно имеет тип DisplayObjectContainer, но экземпляр MovieClip может с легкостью быть родителем другого экземпляра, потому что он тоже является DisplayObjectContainer через механизм наследования. Получив тип DisplayObjectContainer, а не MovieClip, он также позволяет другим контейнерам, таким как Sprite или Loader, быть допустимыми значениями.

Но здесь и кроется проблема. Несмотря на то, что привязка значений переменным, имеющим унаследованный тип, проходит хорошо, и даже необходима во многих случаях, это также означает, что флеш не имеет полного представления о типе этой переменой. Для всех событий и целей флеш может только предполагать, что любое значение имеет свойства и методы, которые специфичны для определения, предоставленного его типом. Родителем некоторого объекта отображения может быть MovieClip, но если вы попытаетесь использовать метод gotoAndPlay() в свойстве parent этого объекта, флеш-плеер выдаст ошибку, потому что gotoAndPlay() не является методом класса DisplayObjectContainer – типа, ассоциированного со свойством parent.

parent.gotoAndPlay(5); // Error: Call to a possibly undefined method

Чтобы распространить это, вам потребуется преобразовать свойство parent в корректный тип, в данном случае MovieClip.

// Cast to MovieClip
MovieClip(parent).gotoAndPlay(5);


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