2009-04-14 11 views
4

アクションスクリプト3では、動的オブジェクト(MovieClipおよびObjectは2つの例)を定義するクラスを記述できます。このオブジェクトは実行時に変更できます。特定のオブジェクトが動的かどうかを知るための方法(実行時にはもちろん)があるかどうかを知りたい。AS3でオブジェクトが動的かどうかを確認する方法

PS:このような何かを行うことなく:

function isDynamic(object) { 
    try { 
     object.newProperty = 'someValue' 
    } catch (e) { 
     return false 
    } 
    return true 
} 

答えて

6

CookieOfFortuneは正しい考えを持っているが、残念ながら、コード自体に問題がある、isDynamicは属性であり、返された値が反映されたStringの値とのXMLListになりますブール値を直接返す子ノードではなく、真または偽の値。次のようになります。

function isDynamic(object) : Boolean 
{ 
    var type:XML = describeType(object); 
    return [email protected]() == "true"; 
}
+0

ええ、私は怠け者でした。 – CookieOfFortune

+0

しかし、describeType .. sighの呼び出しを避けるためにダイナミックをテストしたい場合はどうすればいいですか? –

3

あなたがXML形式でオブジェクトを記述するためにflash.utilsからdescribeTypeを使用することができます。ここではAPIへの参照です:flash.utils.describeType

function isDynamic(object) { 
    var type:XML = describeType(object); 
    if ([email protected] == "true") return true; 
    return false; 
} 
+0

"if(type.isDynamic)がtrueを返す"。私はこれがちょうど "return type.isDynamic"によって作られると思います。 –

3

注意してください。

いつでもあなたはdescribeType()関数を使用したい、くださいくださいはバリエーションを使用してください:ランタイム反射機械に繰り返し呼び出しを行うの

import mx.utils.DescribeTypeCache; 
var typeDesc:XML = DescribeTypeCache.describeType(object).typeDescription; 

パフォーマンスは絶対にを吸うだろう。そのため、アドビがDescribeTypeCacheクラスを発明したのです。

2

これは非常に古い投稿ですが、将来の検索ユーザーにオプションを追加します。

AS3はこれを行う方法が組み込まれています:

mx.utils.ObjectUtil.isDynamicObject(yourObject); 

はそれhereについては、こちらをご覧ください。

+0

http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/framework/src/mx/utils/ObjectUtil.as isDynamicObjectはtry ... catchを使用しています – Aquahawk

関連する問題