Максим Панов: это решит проблему кеширования, но лишние стили так и будут грузиться всем подряд, вдобавок, добавится дополнительный http-запрос на подгрузку файла темы.
Никита Каменев: я сначала тоже так думал, а потом взял и проверил.
Оказывается, реализация на чистом js в 3 раза быстрее, чем на jq. Но, конечно, в реальности надо сравнивать не разы, а миллисекунды и вот тут становится ясно, что практической разницы никакой нет - 1.2мс против 4мс.
Поэтому, смотреть нужно на реальный проект - если в нем уже используется jq, то экономить на спичках не стоит, это только усложнит поддержку. А вот если jq нет, то подключать ее ради конкретного этого функционала - явный overkill.
P.S. Не обращайте внимания на глюки jsperf, его уже полгода лихорадит.
Насчет "лучше так не делать" я не очень согласен - если стили новой темы весят столько же, сколько основная, то лучше грузить их отдельно.
Таким образом, тем, кому другая тема не нужна, не надо будет грузить лишее, и можно будет гибче пользоваться кешированием - при изменении темы будет меняться только ее файл, а не все стили сайта.
В этом случае лучше будет сделать заглушку на весь документ, которая скроется после загрузки новых стилей.
Это, конечно, немного сложнее в реализации, но если трафик пользователей и скорость загрузки сайта имеют значение, то лучше заморочиться.
Ну а если отдельных стилей совсем немного, то, конечно, проще грузить все разом.
Был уверен, что такой вариант не будет работать, потому что при смене URL новый стиль не загрузится.
Однако, потестировал - работает :)
Разве что пути до стилей лучше вынести в переменные, чтобы потом проще было менять. А еще лучше - задать тегу id и держать путь в data-атрибуте, чтобы в коде вообще не было путей.
Во-первых, ни одно из моих замечаний не имеет отношения к ООП, я прокомментировал ваш конкретный код.
А во-вторых, по поводу addEventListener - у меня очень большие сомнения, что функция, которую используют 99% сайтов не работает, и при этом об этом нет ни слова в поисковиках.
Вероятно, вы где-то что-то не так написали ради "оптимизации" или "со сна", уж не обессудьте, я скорее в это поверю.
Кстати, про 2001 год я погорячился - addEventListener был предложен в 2000 году.
Я это больше для автора вопроса написал, чтобы он понимал, что качество ответа не очень высокое.
Если уж учить новичков азам, то нужно делать это правильно и с большой осторожностью, потому что иначе из них потом вырастут криворукие идиоты, учившиеся программировать на Тостере. А нам потом за ними код переписывать.
Дмитрий Маринин: два замечания:
1. Не стоит усложнять код замыканиями и модулями - вы же видите уровень автора, первым делом он начнет спрашивать зачем точка с запятой в самом начале.
2. Кэшировать $button большого смысла нет - она используется только при навешивании обработчика (а внутри обработчика можно заменить на this).
1. Не стоит навешивать обработчики через onclick, лучше использовать addEventListener, мы, все-таки, не в 2001 году живем.
2. var t.
3. Из-за странных пробелов в начале класса код не будет работать так, как ожидается.
4. Код не рассчитан на то, что у элемента могут быть и другие классы.
5. Названия классов с большой буквы - фу.
6. Непонятно зачем вообще ставить обработчик на document, в вопросе об этом ничего не сказано.