Изменение области видимости "this" объекта haxe. Возможно?
Можно ли изменить" эту " область объекта, извне, очень похоже на javascript?
Я вижу интересное приложение, где можно создать объект контейнера, имеющий несколько компонентов, где каждый раз, когда компонент изменяет свойство самостоятельно, он фактически неявно изменяет свойство контейнера.
Не поймите меня неправильно. Я знаю, что тот же эффект может быть достигнут с событиями, привязками, наблюдателями и т. д. Возможности есть действительно бесконечно. Мне просто любопытен этот фанковый способ делегирования полномочий.
2 ответа:
Вы можете достичь этого, используя 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 } }
Другим возможным способом было бы использование макросов для перестройки кода для использования какого-либо другого объекта вместо этого. Однако это было бы относительно трудно и бессмысленно. Я не совсем понимаю вашу идею, но, основываясь на том, что я понял из вашего описания, я бы рекомендовал вам изучить встроенные геттеры и сеттеры на компонентах, которые также изменяют контейнер.