В конце концов я наткнулся на некоторые другие альтернативы и решил поделиться ими здесь.
Альтернатива 1 - использовать наследование
Это, вероятно, очевидный ответ, но он ограничен. Вы должны поместить ваши статические методы в родительский класс, наследовать их, чтобы получить их в подклассах. Это будет работать только с классами. Кроме того, поскольку ActionScript является единственным наследованием, вы можете наследовать только один раз.
Альтернатива 2 - псевдоним методы
Вы по-прежнему пишете служебные функции как статические методы, висящие от утилитных классов, но вы называете их псевдонимами, чтобы иметь к ним доступ с более коротким именем, например:
import mx.binding.utils.BindingUtils;
var bind:Function = BindingUtils.bindProperty;
Теперь вы можете просто позвонить
bind(...);
а не длинный
BindingUtils.bindProperty(...);
Вы можете сделать это в области видимости класса и функции, но не в области видимости пакета - поскольку, очевидно, внутри пакета может быть только один видимый атрибут. Если вы сделаете это в области видимости класса, вам нужно убедиться, что он не конфликтует с другими именами атрибутов вашего класса.
Альтернатива 3 - использование включает
Как описано в этом блоге flexonrails , вы можете использовать include для имитации миксина в ActionScript. include отличается от импорта тем, что все, что он делает, копирует весь файл, из которого вы включаете, и вставляете его в место, куда вы его включаете. Таким образом, он полностью не обрабатывает проблемы с пространством имен, вы не можете впоследствии ссылаться на его полное имя пути, как при импорте, если у вас конфликтующие имена, вы сами справляетесь с этим. Также в отличие от импорта, он создает разные копии одного и того же кода. Но то, что вы можете сделать с этим, это поместить любое количество функций в файл и включить их в область действия класса или функции в другом файле. Пример:
// util/time_utils.as
function convertTime(..){
...
}
function convertDate(..){
...
}
Включать:
include 'util/time_util.as'; // this is always a relative path
...
convertTime(...);