2010-08-26 2 views
1

Функции Getter позволяют вместо синтаксиса obj.meth вместо obj.meth(), я хотел бы создать анонимный один из них для возврата из другой функции. function get():Object { } - недействительный синтаксис. Я не думаю, что Flex предлагает простой способ получить эту функциональность, если это возможно?Возврат анонимной функции getter в Flex/Actionscript?

ответ

4

Вы можете переопределить поведение объекта по умолчанию, расширив flash.utils.Proxy.

Я сделал очень простой онлайн пример кода @ wonderfl.net
http://wonderfl.net/c/ngtC

Я реализовал «setAnonymousGetter», чтобы зарегистрировать анонимную функцию геттер.
В 'getProperty', если свойство является анонимным getter, выполняет 'apply' и возвращает его результат, в противном случае возвращает значение свойства.

+0

Большое спасибо. :) – Kevin

+0

Очень творческий подход. Но это похоже на гораздо большую работу, чем просто добавление новых свойств по мере необходимости, как этот myObject ['newProperty']. – JeffryHouser

1

Если я понимаю, вы хотите создать анонимную функцию getter? Зачем? Какую возможную цель это может случиться?

Если вы хотите создать свойства на лету, вы можете сделать с помощью объекта или словаря:

myObject['newProperty'] = something; 

«newProperty» может быть все, что вы хотите, в том числе другой переменной.

+1

Поскольку функция может делать намного больше, чем просто возвращать или содержать значение, и если я не был обманут, анонимные функции Actionscript являются правильными закрытиями и могут использовать внешние контексты, что делает их значительно мощными. Должен быть способ динамически создавать функции getter, поскольку вы можете динамически создавать обычные функции, даже динамически добавлять их в классы. В Python вы можете создать объект дескриптора, перегрузив '__get __()', и в то время как AS не имеет перегрузки оператора, от этого он не борется. – Kevin

+1

Да, функция может сделать намного больше, чем вернуть значение. Да, анонимные функции могут использоваться как правильные закрытия. Однако методы get нельзя вызывать как регулярную функцию. Они должны вызываться с использованием обозначения свойства объекта. Традиционные методы не имеют такого ограничения. Почему вы не можете использовать «обычную» анонимную функцию? Почему вы настаиваете, что это должна быть функция get? – JeffryHouser