2011-05-16 61 views
0
var test:*; 
test = sMC // Some movieClip exported for ActionScript 
var f = new test; 

对不起,如果问题有点跛脚,但我开始怀疑,这是星号,这是什么意思?变量类型星号

回答

0

星号表示变量类型未定义,或通配符。 含义您可以将test定义为任何类型的变量。

+0

因此它不是排他性的影片剪辑?如果是这样,这是我给MovieClip分配一个变量的唯一方法吗? sMC是MovieClip的名称... – Rek 2011-05-16 07:04:31

+0

您应该可以将它分配给一种'Class'类型。我相对确定它会起作用。所以'var test:Class;' – stormbreaker 2011-05-16 07:16:29

1

回答你原来的问题,你的问题在评论问:

星号是一个通配符,这意味着该变量将接受任何类型的信息的。例如:

var wildcard:*; 

wildcard = "hello"; 
wildcard = 10; 
wildcard = new MovieClip(); 

以上所有都将工作。

变量应尽可能严格地键入;通过这个我的意思是,当你想将一个MovieClip分配给一个变量时,你的变量应该被输入为一个MovieClip。像这样:

var mc:MovieClip = new MovieClip(); 

这适用于任何事情。如果你创建你自己的类,那么将它用作你的类的变量的类型。

var thing:MyClass = new MyClass(); 

,如果你尝试分配一个不相关类型的一个变量,像这样的错误会被抛出:

var thing:MovieClip = "hello"; 

但只要你的变量类型是沿着你的继承链某处'分配给它,然后它会工作。

var thing:DisplayObject = new MovieClip(); 

如果您想遍历包含您自己的扩展MovieClip类的数组的循环数组,可以很方便。

var ar:Array = []; 

/** 
* MyClass extends MovieClip 
* MyOtherClass extends MovieClip 
*/ 

ar.push(new MyClass()); 
ar.push(new MovieClip()); 
ar.push(new MyOtherClass()); 

var i:MovieClip; 
for each(i in ar) 
{ 
    trace(i); 
} 

总的来说,通配符类型不是建议。在最坏的情况下使用Object,因为闪存中的所有内容都可以扩展。通配符或对象可能有用的一种情况是,如果您想创建一个可以接受任何类型数据的函数。像这样:

var myarray:Array = []; 

function addToArray(data:Object):void 
{ 
    myarray[myarray.length] = data; 
    trace(data); 
} 

OR

function addToArray(data:*):void 
{ 
    myarray[myarray.length] = data; 
    trace(data); 
} 

希望这一切是很有意义的。