Краткий ответ
То, как я это узнал ( относится и к созданию пространства имен ):
// Check if the com namespace does not exist:
if (!com) {
var com = {};
}
// Check if your namespace does not exist:
if (!com.myNamespace) {
var com.myNamespace = {};
}
<Ч />
Некоторая информация, которую я узнал (пока)
Согласно книге, которую я читаю, пространство имен com
является контейнером для коммерческих продуктов (я имею в виду веб-сайты, библиотеки и т. Д.).
Пространство имен изначально было создано для хранения доменов. Тем не менее, сегодня вы найдете com.*
в библиотеках, базах данных или даже в фреймворках!
В настоящее время он управляется VeriSign и существует в течение 33 лет сейчас!
<Ч />
Длинный ответ
Во-первых, нам нужно убедиться, что пространство имен main существует. Мы сделаем эту проверку, если com
не существует:
if (!com) {
var com = {};
}
com
- наиболее распространенное пространство имен для проверки. Однако мы можем проверить любое пространство имен.
Мы могли бы пропустить эту часть, но было бы действительно раздражающим, чтобы смешать все ваши функции.
Если com
не существует, создайте его.
var com = {};
Наконец, нам нужно проверить, существует ли myNamespace
. Мы будем использовать тот же метод для com
, но на этот раз мы добавим com.
до myNamespace
.
if (!com.myNamespace) {
var com.myNamespace = {};
}
Причина, по которой мы добавляем com.
перед объявлением пространства имен, заключается в том, что пространство имен com
создается на втором уровне , а myNamespace - на третьем уровне.
Я рекомендую вам добавить пространство имен четвертого уровня для вашего проекта.
Это гарантирует, что:
у вашего проекта есть свое пространство имен (если занято myNamespace).
ваш проект не будет смешиваться с другими проектами (например, com.projectA.other и com.projectA.yourProject ).
Ваши функции не будут перепутаны (например, у вас есть функция с именем write).
<Ч />
Теперь ваш код
Ты почти у цели! Вот как это выглядело бы I :
if (!TOP) {
// Reinitialize your TOP Namespace here:
var TOP = {};
}
if (!TOP.middle) {
// Reinitialize your MIDDLE Namespace here:
var TOP.middle = {};
}
if (typeof TOP.middle.realModuleName == "function") {
new TOP.middle.realModuleName ();
}
else {
// Redefine your function here (you never know ;) )
}