是否可以从外部更改对象的“this”范围,就像在 javascript 中一样?
我看到一个有趣的应用程序,其中可以创建一个包含多个组件的容器对象,其中每次组件自己修改一个属性时,它实际上隐式地修改了容器上的一个属性。
别弄错我的意思。我知道使用事件、绑定、观察者等可以达到相同的效果。可能性确实是无穷无尽的。我只是对这种时髦的委派方式感到好奇。
是否可以从外部更改对象的“this”范围,就像在 javascript 中一样?
我看到一个有趣的应用程序,其中可以创建一个包含多个组件的容器对象,其中每次组件自己修改一个属性时,它实际上隐式地修改了容器上的一个属性。
别弄错我的意思。我知道使用事件、绑定、观察者等可以达到相同的效果。可能性确实是无穷无尽的。我只是对这种时髦的委派方式感到好奇。
您可以使用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
}
}
另一种可能的方法是使用宏来重建代码以使用另一个对象而不是这个。但是,这将相对困难且 IMO 毫无意义。我不太了解您的想法,但根据我从您的描述中了解到的情况,我建议您查看也会修改容器的组件上的内联 getter 和 setter。