5

搜索 'var:*' 有点棘手,因为大多数搜索引擎都找不到它。

与 var:Object 相比,我不清楚 var:* 的确切含义

我认为它可以让我在对象上设置任意属性,例如:

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

但这给了我一个错误:

Property nonExistantProperty not found on x

* 究竟是什么意思?

编辑:我将原始 var:* 修复为正确的 var x:*。失去了我的互联网连接

4

5 回答 5

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# *

(标记引擎拒绝将其链接起来,因为有星号。)

于 2008-10-17T00:57:04.073 回答
2

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

var x:* = oneTypeObject;

创建变量 x 然后将oneTypeObject变量分配给它。您可以为其分配完全不同的类型,如下所示:

var x:* = anotherTypeObject;

但是,您仍然不能任意设置或访问属性;它们必须存在于基础类型中(要么 要么oneTypeObjectanotherTypeObject

这两种类型可能具有相同名称的属性,这意味着您可以访问或设置该属性,x而无需关心底层类型。

于 2008-10-16T05:49:18.417 回答
1

它是“无类型”类型。它只是意味着变量可以是任何类型。基本上和使用这个效果一样:

var x = myObject;
于 2008-10-16T05:11:38.257 回答
1

这意味着没有指定类型,可以与任何类型一起使用。但是,您不能在其上设置随机属性。它的行为就像您设置的任何类型。确切的语法是:

var x:*;
于 2008-10-16T05:12:41.343 回答
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;
于 2013-02-14T20:59:33.287 回答