var x:*究竟是什么意思在actionscript中?

时间:2008-10-16 05:04:39

标签: actionscript

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

与var:Object

相比,我不清楚var:*的含义

我认为它会让我在像这样的对象上设置任意属性:

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

但这给了我一个错误:

Property nonExistantProperty not found on x

*究竟是什么意思?

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

5 个答案:

答案 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;

但是,您仍然无法任意设置或访问属性;它们必须存在于基础类型中(oneTypeObjectanotherTypeObject)。

这两种类型可能具有相同名称的属性,这意味着您可以在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;