Вы видите разницу между временем компиляции и типом времени выполнения. В этом коде:
trace( active_button.upState ); // [object TextField]
Вы передаете объект для трассировки, и трассировка покажет фактический тип объекта, который существует во время выполнения.
Однако в этом случае:
active_button.upState.textColor = 0x000000;
Вы пишете код, который использует объект в upState
. upState определяется как DisplayObject
, и все DisplayObject
не имеют свойства textColor
, поэтому оно должно выдать ошибку. upState
разрешено фактически содержать все, что является DisplayObject
или подклассом DisplayObject
, как TextField
.
Вы можете сказать компилятору, что точно знаете, что это TextField
, приведя его.
TextField(active_button.upState).textColor = 0x000000;
Существует еще одна форма приведения с использованием ключевого слова as
, которое будет возвращать объект, указанный как указано, или null
. Вы хотите использовать это ключевое слово, чтобы проверить, является ли объект определенного типа, а затем использовать его условно (через проверку != null
).
var textField:TextField = active_button.upState as TextField;
if (textField != null) {
textField.textColor = 0;
}