2015-07-02 94 views
1

有沒有辦法判斷對象是類還是類的實例?這看起來是否正確:有沒有辦法判斷對象是類還是對象?

if (object is Class) { 
    return "[class " + getQualifiedClassName(value) + "]"; 
} 
else if (object is Object) { 
    return "[object " + getQualifiedClassName(value) + "]"; 
} 

看來這可能不會捕獲所有情況。

UPDATE
這裏是我的功能我使用:

/** 
    * Get string value of an object if value is not simple. For primitives the value is not changed. 
    * For class objects, "[class ClassName]" is returned. 
    * For objects, "[object ClassName]" is returned. 
    * */ 
    public static function getStringValue(value:*):* { 
     if (ObjectUtil.isSimple(value)) { 
      return value; 
     } 
     else if (value is Class) { 
      return "[class " + getQualifiedClassName(value) + "]"; 
     } 

     return "[object " + getQualifiedClassName(value) + "]"; 
    } 
+0

你的目標是什麼?爲什麼你想知道這個? – null

+0

我想在運行時設置一個值。有時我需要爲設置皮膚時創建一個類,有時我需要設置一個對象。但在我能做到這一點之前,我想向用戶顯示skinClass值的當前值。所以我getStyle(風格),如果值是類,我寫「類」或「對象」等。然後讓用戶通過字符串將值設置爲新的方式。 –

+0

在什麼情況下,它會成爲一個班級,在什麼情況下它會成爲一個對象? – null

回答

3

首先,我認爲可能是最簡單的方法是使用String()

var o:MyClass = new MyClass(); 
var m:MovieClip = new MovieClip(); 

trace(String(MyClass));  // gives : [class MyClass] 
trace(String(o));   // gives : [object MyClass] 

trace(String(MovieClip)); // gives : [class MovieClip] 
trace(String(m));   // gives : [object MovieClip] 

而且更肯定的是,我認爲你可以使用flash.utils.describeType()

trace(describeType(o)); 

// gives : 
// <type name="MyClass" base="Object" isDynamic="false" isFinal="false" isStatic="false"> 
//  <extendsClass type="Object"/> 
// </type> 

trace(describeType(MyClass)); 

// gives : 
// <type name="MyClass" base="Class" isDynamic="true" isFinal="true" isStatic="true"> 
//  <extendsClass type="Class"/> 
//  <extendsClass type="Object"/> 
//  <accessor name="prototype" access="readonly" type="*" declaredBy="Class"/> 
//  <factory type="MyClass"> 
//   <extendsClass type="Object"/> 
//  </factory> 
// </type> 

。希望可以幫助。

2

if (object is Class)確實會測試如果對象是一個類,但它也是一個對象,因爲類是對象的子類。 所以你的第二個測試是不必要的,因爲任何不爲null的東西都是對象。

+0

我沒有AS3編譯器在手:(如果(3是對象)'?如果這將返回true? – Vesper

+1

是的,它會... – 3vilguy

+1

@Vesper我粘貼我正在使用的函數它檢查原語「簡單」,然後檢查它是否是一個Class,然後最後一次檢查是否爲Object。 –

相關問題