更改haxe对象的“this”范围。可能?

时间:2012-09-19 10:10:15

标签: design-patterns delegates haxe

是否可以从外部更改对象的“this”范围,非常类似于javascript?

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

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

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

另一种可能的方法是使用宏来重建代码以使用另一个对象而不是这个。然而,这将是相对困难的,IMO毫无意义。我并不真正了解你的想法,但根据我的描述理解,我建议你研究一下内联的getter和setter,它们也会修改容器。