当声明变量具有开放数据类型时,在将变量键入为“通配符”(我不确定此名称的正式名称)和输入变量之间有任何区别,尤其是性能差异目的?ActionScript - “通配符”与对象数据类型之间的区别?
var myVar:*;
var myVar:Object;
当声明变量具有开放数据类型时,在将变量键入为“通配符”(我不确定此名称的正式名称)和输入变量之间有任何区别,尤其是性能差异目的?ActionScript - “通配符”与对象数据类型之间的区别?
var myVar:*;
var myVar:Object;
它不会影响性能。我使用*时,我不知道对象将是什么类型,直到运行时。
从LiveDocs中:使用*在这种情况下:
- 当你想推迟类型检查运行时。您可以在严格模式下使用 无类型属性或 的表达式规避编译时类型检查 。但是请注意,赋值语句 那 运行时类型检查时是否使用 严格模式与否。
- 当你要存储在属性值undefined。不同于 以前的ActionScript的版本中,未定义的 值不是 Object数据类型的成员。您必须使用 未定义属性来存储未定义的值 。
在ActionScript 3的所有变量和类类型是Object
子类,所以在功能方面,我不认为这是两者之间有什么区别。
的Object
一些子类,如int
和Number
的行为很像栈对象(这意味着var firstInt:int = 5
和var secondInt:int = 5
实际上指向同一个Object
),但这并不影响他们如何对待,当你指向他们使用泛型变量。
如果我可能冒险猜测,我会说他们增加了通配符作为保存输入的一种方式,并且使得C/C++移植者更容易使用指针void*
而不是基地Object
类型。
您可以用同样的方式使用这两种类型。他们之间虽然有一些差异。通配符类型具有附加值:undefined。
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");