2008-10-16 69 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;