ActionScript - “通配符”和对象数据类型之间的区别?

时间:2010-09-20 03:13:11

标签: actionscript-3 object wildcard

当声明变量具有开放数据类型时,在将变量键入为“通配符”(我不确定其正式名称)和键入变量之间是否存在任何差异,尤其是性能差异一个对象?

var myVar:*;

var myVar:Object;

3 个答案:

答案 0 :(得分:2)

它不会影响性能。我使用*时,我不知道Object将在运行时使用哪种类型。

来自livedocs:在这些情况下使用*:

  
      
  • 如果要将类型检查推迟到运行时。你可以使用   无类型属性或表达式   规避编译时类型检查   在严格的模式。但请注意   运行时类型检查分配   无论您使用是否发生声明   严格模式与否。
  •   
  • 如果要将值undefined存储在属性中。不像   以前版本的ActionScript,   value undefined不是。的成员   对象数据类型。你必须使用   用于存储值的非类型化属性   未定义。
  •   

答案 1 :(得分:1)

ActionScript 3中的所有变量和类类型都是Object的子类,因此就功能而言,我认为两者之间没有任何区别。

Object的某些子类(如intNumber的行为类似于堆栈对象(这意味着var firstInt:int = 5var secondInt:int = 5实际上指向相同的{ {1}}),但这并不影响使用通用变量指向它们时的处理方式。

如果我可以冒险猜测,我会说他们添加了通配符作为保存输入的方法,并使C / C ++移民更容易使用Object指针来引用泛型类型而不是基础void*类型。

答案 2 :(得分:0)

您可以以相同的方式使用类型。但它们之间存在一些差异。通配符类型具有附加值:未定义

var a: Object;
var b: *;
var c: *;

trace(a + ": " + getQualifiedClassName(a) + "       " + b + ": " + getQualifiedClassName(b) + "       " + c + ": " + getQualifiedClassName(c));

b = a;
a = c;

if (a == undefined)
    trace("compiles with a warning");