1

クラスの 1 つでこの関数を定義しています。

public function onUse():void {};

次に、別のクラス (「class2」と呼びましょう) で、このクラスのオブジェクトを作成し、この関数を別の関数でオーバーライドします。いくつかのGoogle-Fuの後、私はこれを見つけて使用しました...

button.onUse {
    variable = value;
}

...しかし、 onUse() が呼び出されたときではなく、即座に実行されます-これは常に空の関数のようです。

それ以上のものは見つかりませんでした - class2 内で関数を指定して を使用するなど、自分でいくつか試してみましたbutton.onUse = function();が、常にエラーがスローされます。

私がやろうとしていることが実際に可能かどうか、また可能な場合はどうすればできるか教えてもらえますか?

4

2 に答える 2

3

クラスを拡張する場合にのみ、関数をオーバーライドできます。

public class A {
    public function foo():void {
        doStuff();
    }
}

public class B extends A {
    override public function foo():void {
        doOtherStuff();
    }
}

var n:A = new A(); 
n.foo(); // => calls doStuff();

var o:B = new B();
o.foo(); // => calls doOtherStuff();

したがって、実行時にインスタンスのクラス メソッドに別の関数を割り当てることはできません。

ただし、元のクラスに type のフィールドをFunction含めてから、別のクロージャーを割り当てることができます。

public class A {
    public var foo:Function;
}

var n:A = new A();
n.foo = function ():void { 
    doStuff();
};
n.foo(); // => calls doStuff();

var o:A = new A();
o.foo = function ():void {
    doOtherStuff();
}
o.foo(); // => calls doOtherStuff();
于 2012-04-04T15:33:12.657 に答える
0

の構文を確認してください

button.onUse {
    variable = value;
}

関数は次のように定義されます

パブリック関数onUse():void {};

と上書きされます

override public function onUse():void {
}

別のクラスで

あなたがそれをやろうとしている方法は、関数をオーバーライドすることを構成しません。

同様の状況で私が行ったことは、クラスにonClickFunction関数を作成することです

public var onClickFunction:Function = null; 

次に、CLICKイベントリスナー関数で追加します

if(onClickFunction != null){
    onClickFunction();
}

次に、次のようにしてクリック機能を割り当てることができます

button.onClickFunction = function():void {variable = value; //やります}

これはそれを行うための最良の方法ではありませんが、おそらく機能を実装する最も簡単な方法です。そして理想的には、宇宙海賊が提案した方法で継承を使用します。

于 2012-04-04T15:43:30.490 に答える