更改haxe对象的"this"范围.可能?

Pre*_*hev 2 delegates design-patterns haxe

是否有可能从外部更改对象的"this"范围,非常类似于javascript?

我看到一个有趣的应用程序,其中一个可以创建一个容器对象,具有多个组件,每次组件自己修改一个属性时,它实际上隐式修改容器上的属性.

别弄错我的意思.我知道事件,绑定,观察者和不可以实现相同的效果.可能性确实无穷无尽.我只是对这种时髦的授权方式感到好奇.

blu*_*112 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
    }
}
Run Code Online (Sandbox Code Playgroud)