2012-01-17 34 views
1

因此,這裏是我想要的僞做:發現是什麼對象在數組(AS3)

array = new Array(); 
thisObj = new objectTypeOne(); 
thisObj2 = new objectTypeTwo(); 
array.push(thisObj); 
array.push(thisObj2); 

for(i=0; i<=array.length, i++) 
{ 
    if(array[i] == objectTypeOne()) 
    { 
    //do code 
    } 
} 

我知道我可以有兩個不同的陣列,每個對象類型,但是這會毀了很多我假設他們都在同一個陣列中的其他代碼。 (他們實際上是同一個對象,但有些微小但重大的差異,我想我應該確實有objectType兩種派生自其他的,但這在當時是不相關的)。

+0

我不明白,你到底想幹什麼?當你循環數組時,你需要找到什麼對象類型是當前對象?你可以使用'if(array [i]是objectTypeOne)'//代碼 – randomUser56789 2012-01-17 09:25:43

+0

請參閱我在回答中給你的最後一條評論。這意味着你有一個未定義的引用被推入你的數組中......這不應該發生,但是你可以在運行時用一些錯誤檢查來處理這些事情。 – 2012-01-17 09:44:50

回答

1

我相信你要找的是什麼:

if(array[i] is MyObjectType) { 
    //I found an instance of MyObjectType 
} 

操作「is」不運行時類型分析,並會如果你正在測試的對象(在這個例子中,array[i])是直接返回true您正在比較的類型或子類(在本例中爲MyObjectType)。您可能還想使用typeof進行調查。但是,儘量避免使用類似這樣的調用或使用「typeof」調用...在運行時查找類型信息在任何語言中都是昂貴的。

+0

P.S. - 我可以看到你還是很新的,所以歡迎來到StackOverflow。 :) – 2012-01-17 09:22:48

+0

感謝您的描述性答覆(並感謝您,我非常喜歡StackOverflow)。 我只是有一個錯誤: – 2012-01-17 09:37:19

+0

如果我使用: 如果(陣列[i]爲對象()) 它說:不正確的參數,預期之一。 如果我使用: 如果(陣列[i]爲對象) 它給錯誤「一詞是不確定的,沒有屬性」在運行時 – 2012-01-17 09:38:45

1

首先將這個i<=array.length改爲i<array.length。這是「術語未定義」錯誤的原因。

通過@Ascension系統提出的解決方案可以在創建不同勢類的實例使用,像

array = new Array(); 
thisObj = new Student(); 
thisObj2 = new Employee(); 
array.push(thisObj); 
array.push(thisObj2); 

,那麼你可以檢查像

for(i=0; i<array.length, i++) 
{ 
    if(array[i] is Student) 
    { 
    //do code 
    }else if(array[i] is Employee){ 

    } 
} 

如果使用的是自定義對象,像這樣做

array = new Array(); 
thisObj = new Object(); 
thisObj.type = "type1"; 
.... 
.... 
thisObj2 = new Object(); 
thisObj2.type = "type2"; 
... 
... 
array.push(thisObj); 
array.push(thisObj2); 

for(i=0; i<array.length, i++) 
{ 
    if(array[i].type == "type1") 
    { 
    //do code 
    }else if(array[i].type == "type2"){ 

    } 
}