2008-10-16 72 views
5

搜索'var:*'有点棘手,因为大多数搜索引擎不会找到它。var x:*在动作中意味着什么?

我不清楚到底是什么VAR:*手段,比起说VAR:对象

我认为这将让我像一个对象上设置的任意属性:

var x:* = myObject; 
x.nonExistantProperty = "123"; 

但是这给我错了:

Property nonExistantProperty not found on x 

*是什么意思?

编辑:我将原始var:*修正为正确的var x:*。丢失了我的网络连接

回答

1

这是“无类型”类型。这仅表示变量可以是任何类型。基本上与使用此效果相同:

var x = myObject; 
1

这意味着该类型未指定,可以与任何类型一起使用。但是,您无法在其上设置随机属性。它的行为将与您设置的任何类型相同。确切的语法是:

var x:*; 
2

这是一种指定无类型变量的方式,以便您可以基本上为其分配任何类型。代码

var x:* = oneTypeObject; 

创建变量x然后为其分配oneTypeObject变量。可以按如下方式分配一个完全不同的类型,它还有:

var x:* = anotherTypeObject; 

不过,你仍然不能随意设置或访问属性;它们必须存在于底层类型(oneTypeObjectanotherTypeObject)中。

这两种类型都可能具有相同的命名属性,这意味着您可以在x中访问或设置该属性,而不必关心基础类型。

12

对其他答案进行扩展,声明一些类型为星号的文件是,正好是,与将其保留为无类型相同。

var x:* = {}; 
var y = {}; // equivalent 

然而,是否允许分配不存在的属性的对象的问题无关与参考的类型,和由该对象是否是一个动态的实例来确定类。

例如,由于对象是动态的,字符串不是:

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 

注意你怎么能始终分配新属性的对象,不管你用什么样的参考。同样,你永远不能为字符串赋予新的属性,但是如果你使用了类型引用,那么编译器会捕获这些引用,并且对于无类型引用,编译器不知道b是否是动态的,所以发生错误在运行时。

顺便提及,上型星号DOC参考可以在这里找到:

http://livedocs.adobe.com/labs/air/1/aslr/specialTypes.html# *

(该标记引擎拒绝linkify的是,由于星号的)

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;