2013-06-05 6 views
4

Скажем, у меня есть класс с некоторыми пару свойств:чем разница между * и Object

public class MyClass { 
    public var fooProp:*; 
    public var barProp:Object; 
} 

Что разница, практически говоря, между ними? Существуют ли типы переменных, которые я могу позже назначить fooProp, которые я не могу назначить barProp?

ответ

6

Только нетипизированные переменные могут содержать значение undefined. Необязательные переменные - это переменные, которые либо не имеют аннотации какого-либо типа, либо используют символ asterisk * для аннотации типа.

From ActionScript data type descriptors:

В предыдущих версиях ActionScript, переменной без указания типа аннотацию был автоматически присвоен тип данных Object. Это не более длинное значение true в ActionScript 3.0, которое теперь включает идею действительно нетипизированной переменной . Переменные без аннотации типа теперь считаются нетипизированными. Если вы предпочитаете разъяснять читателям вашего кода , что вы намерены оставить переменную нетипизированной, вы можете использовать новый символ звездочки (*) для аннотации типа, который равен , эквивалентный аннотации типа. Следующий пример показывает две эквивалентные операторы, оба из которых объявляют нетипизированное переменную:

var x 
var x:* 

только нетипизированные переменные могут содержать значение не определено. Если вы попытаетесь установить , присвойте значение неопределенным переменной, имеющей тип данных, Flash Игрок или Adobe AIR преобразует значение undefined в значение по умолчанию этого типа данных. Для экземпляров типа данных объекта значение по умолчанию равно NULL, что означает, что Flash Player или Adobe AIR преобразуют значение undefined в null, если вы попытаетесь присвоить экземпляр объекта undefined .

В качестве примера:

var t:* = undefined; 
trace(t); // outputs: undefined 

var t:Object = undefined; 
trace(t); // outputs: null 
Смежные вопросы