搜索'var:*'有点棘手,因为大多数搜索引擎都找不到它。
与var:Object
相比,我不清楚var:*的含义我认为它会让我在像这样的对象上设置任意属性:
var x:* = myObject;
x.nonExistantProperty = "123";
但这给了我一个错误:
Property nonExistantProperty not found on x
*究竟是什么意思?
编辑:我将原始的var:*修复为正确的var x:*。丢失了我的网络连接
答案 0 :(得分:12)
扩展其他答案,声明类型为星号的内容完全与将其保持无类型相同。
var x:* = {};
var y = {}; // equivalent
但是,是否允许为对象分配不存在的属性的问题与引用的类型无关,并且取决于对象是否是动态类的实例。
例如,因为Object是动态的而String不是:
var o:Object = {};
o.foo = 1; // fine
var a:* = o;
a.bar = 1; // again, fine
var s:String = "";
s.foo = 1; // compile-time error
var b:* = s;
b.bar = 1; // run-time error
请注意,无论您使用何种类型的引用,都可以始终为对象分配新属性。同样,您永远不能为String分配新属性,但是如果您使用类型化引用,那么编译器将捕获它,并且对于无类型引用,编译器不知道b
是否是动态的,所以错误发生在运行时。
顺便提一下,类型星号的文档参考可以在这里找到:
http://livedocs.adobe.com/labs/air/1/aslr/specialTypes.html# *
(由于星号,标记引擎拒绝将其链接起来。)
答案 1 :(得分:2)
这是一种指定无类型变量的方法,因此您基本上可以为其指定任何类型。代码
var x:* = oneTypeObject;
创建变量x然后为其分配oneTypeObject
变量。您可以为其指定完全不同的类型,如下所示:
var x:* = anotherTypeObject;
但是,您仍然无法任意设置或访问属性;它们必须存在于基础类型中(oneTypeObject
或anotherTypeObject
)。
这两种类型可能具有相同名称的属性,这意味着您可以在x
中访问或设置该属性,而无需关注基础类型。
答案 2 :(得分:1)
这是“无类型”类型。它只是意味着变量可以是任何类型。基本上和使用它的效果相同:
var x = myObject;
答案 3 :(得分:1)
这意味着未指定类型,可以使用任何类型。但是,您无法在其上设置随机属性。它的行为类似于您设置的任何类型。确切的语法是:
var x:*;
答案 4 :(得分:0)
正如他们之前所说,它是无类型的,所以它可能包含任何类型的数据。但是,您无法在操作中将其视为此类。例如,这是有效的代码:
var untyped:* = functionThatReturnsSomeValue();
但如果你走得更远,你必须要小心,否则你可能会被咬伤:
var name:String = untyped.name;
现在,如果该函数返回的对象恰好是一个对象,其id为" name,"你很清楚。但是,除非您确定是这种情况,否则最好使用类型化对象。这样,如果您在运行时执行可能引发错误的事情,编译器将提醒您:
(elsewhere)
public class TypedObject()
{
public var name:String = "";
}
(and the code at hand)
var typed:TypedObject = functionThatReturnsTypedObject();
var name:String = typed.name;