По поводу вашего последнего тезиса, обычно какие-то специфичные фичи, которых нету в браузерах, делают через $.support, модернизер ну или, например если нам надо проверить есть ли у браузера поддержка pushState, то просто if( window.history.pushState).
Но буквально недавно у меня была проблема с методом jQuery animate — scrollTop. в IE7 постоянно валились скрипты изза ошибки на уровне jQuery, и тут try/catch пришли на помощь.
По сути задача сводится к созданию анонимного объекта в рантайме. Можно определить пустой класс (var a = new {};) и потом через рефлексии создать наследника этого класса, который уже будет содержать все необходимые поля.
>>Нет, методы трейтов можно переопределять в классе. Зачем рассуждать и дискутировать, не зная предмет?
То что определенный в классе метод выше по приоритету чем то, что объявляется в трейте еще ничего не говорит о полезности. Реализация трейтов в PHP все же отличается от общепринятой.
>>Вы ведь пользовались Yii, поведения (Behaviors) в нем по сути и есть реализация идеологии трейтов.
Бихейверы в Yii это попытка реализовать примеси, а трейты это совершенно другой механизм. Разработчики YII отказались от затеи применять трейты для поведений.
Сравнивать статические классы и трейты вообще бессмысленно. Трейты — это вещь выполняющаяся на уровне парсинга, так же как и дефайны в сях. Это удобно, тут не спорю. Но обычно если при проектировании системы очень нужды трейты и много — то это значит что что-то пошло не так. Или я не прав?