2

javascriptのように、オブジェクトの「this」スコープを外部から変更することは可能ですか?

複数のコンポーネントを持つコンテナ オブジェクトを作成できる興味深いアプリケーションを目にします。このアプリケーションでは、コンポーネントが独自にプロパティを変更するたびに、実際にはコンテナのプロパティを暗黙的に変更します。

勘違いしないでくれ。イベント、バインディング、オブザーバーなどで同じ効果が得られることを私は知っています。可能性はまさに無限大です。このファンキーな委任方法にただ興味があります。

4

2 に答える 2

7

これはReflect.callMethodを使用して実現できますが、コンパイル時にタイプセーフではないことを知っておく必要があります。ここに小さな例があります:

class Test
{
    public var a:Int;

    public function new()
    {
        this.a = 0;
    }
}

class Test2
{
    public var a:Int;

    public function new()
    {
        this.a = 0;
    }

    public function increment()
    {
        this.a++;
    }

    static public function main()
    {
        var t = new Test2();
        var t2 = new Test();
        Reflect.callMethod(t2, Reflect.field(t, "increment"), []);

        trace(t2.a); //Traces 1
    }
}
于 2012-09-19T13:19:45.863 に答える
0

別の可能な方法は、マクロを使用して、これの代わりに別のオブジェクトを使用するためにコードを再構築することです。ただし、それは比較的難しく、IMOは無意味です。私はあなたの考えを本当に理解していませんが、あなたの説明から私が理解したことに基づいて、コンテナを変更するコンポーネントのインラインゲッターとセッターを調べることをお勧めします。

于 2012-10-06T08:28:34.513 に答える