0

次のクラスがあったとします

public class Scene{ 
  public static var title="new scene";
  public function Scene(){}
  public static function start() { trace("scene started"); }
}

Scene クラスの静的変数と関数にこのようにアクセスするにはどうすればよいでしょうか?

var i:Class = Scene;
trace(i.title);
i.start();

クラスで割り当てられた変数がアクションスクリプトでどのように機能するかを理解しようとしています。どんなヒントでも大歓迎です。ありがとう。

4

3 に答える 3

1
var i:Class = Scene;
trace(i.title);

行 2 に到達すると、コンパイラは i がシーンであると想定できなくなるため、エラーをスローする必要があります。Class オブジェクトを強制する場合は、動作するはずです。

var i:Class = Scene;
trace((Scene(Class).title);
于 2013-02-15T10:02:47.797 に答える
1

クラスから静的メソッドが呼び出されます。

trace(Scene.title);
Scene.start();

シングルトン パターンは、コンストラクター、ローカル参照、およびインターフェイス クラスによる潜在的な抽象化を可能にします。

Sceneシングルトンとしての例:

package
{

    public class Scene
    {

        private static var instance:Scene = new Scene();

        public static function getInstance():Scene
        {
            return instance;
        }

        public var title:String = "new scene";

        public function Scene()
        {
            if (instance)
                throw new Error("Scene is a singleton and can only be accessed through Scene.getInstance()");
        }

        public function start():void
        {
            trace("scene started.");
        }

    }
}

実装例は次のようになります。

var i:Scene = Scene.getInstance();
trace(i.title);
i.start();
于 2013-02-15T05:05:12.440 に答える
1

これは、動的クラス (Scene) & そのプロパティ / メソッドにアクセスする方法です:

var myDynamicClasses:Array = [Scene];   // Required

var i:Class = Class(getDefinitionByName("Scene"));
trace(i.title);
i.start.call();

最初の行が含まれていない場合、これはエラーをスローする可能性があります。なぜなら、コンパイラはクラス Scene (Adobe のパッケージのものではない) が使用されていないことに気付くと、それを無視するからです。したがって、動的初期化には使用できません。

これらのクラス名を変数に入れるか、上記のように簡単なハックとして配列を宣言することで、コンパイラにこれらのクラスを強制的に含めることができます。

多くの動的クラスがある場合は、この配列にそれらへの参照を追加できます。各クラスは、動的初期化のためにコンパイラによって含まれます。

于 2013-02-15T05:05:39.467 に答える