Javascript изначально не поддерживает пространства имен и требует обходных путей.
Когда мы создаем библиотеку JavaScript, пространство имен играет важную роль. Мы можем инкапсулировать разрозненные файлы JavaScript (*.js), составляющие библиотеку JavaScript, в пространстве имен, не определяя глобальные функции или классы. Например, Person, который много раз встречается в этой главе, может быть инкапсулирован в подходящее пространство имен как часть библиотеки:
Код 5-13:
Скопируйте код кода следующим образом:
вар ком = {};
com.anyjava = {};
com.anyjava.Person = функция (имя) {
//Частные члены
вар _name = имя;
//Аксессор
this.getName = функция() {
вернуть _имя;
};
this.setName = функция(имя) {
_имя = имя;
};
};
//прототип
com.anyjava.Person.prototype = {
есть: функция() {
alert(this.getName() + "что-то ест.");
},
сон: функция() {
alert(this.getName() + "спит.");
},
прогулка: функция() {
alert(this.getName() + "идет.");
}
};
var dirk = новый com.anyjava.Person("Дирк");
дирк.еат();
Из кода 5-13 мы получаем пространство имен, которое больше соответствует привычкам разработчиков Java, и при создании экземпляра объекта Person мы также должны указать путь к нашему пространству команд.
Вот небольшой совет. Если вы используете библиотеку JavaScript, разработанную другими, и имеете относительно полное планирование пространства имен, вам может надоесть каждый раз писать длинные пространства имен. Например, если вы используете разработанную мной библиотеку JavaScript в пространстве имен com.anyjava.control.ui, вы захотите использовать множество расширенных элементов управления пользовательского интерфейса, думаю, вам не захочется писать var xxx = new com. много раз .anyjava.control.ui.XXX(). Указывая псевдонимы пространства имен, мы можем писать меньше повторяющегося кода, как показано в коде 5-14, еще одном методе создания экземпляра Person в коде 5-13:
Код 5-14:
Скопируйте код кода следующим образом:
вар нс = com.anyjava;
вар Дирк = новый ns.Person("Дирк");
дирк.еат();
Последнее, что я объясню, — это проблема, на которую необходимо обратить внимание при использовании пространств имен. При написании библиотеки JavaScript в большинстве случаев операторы объявления пространства имен могут появляться в нескольких местах файла JavaScript одновременно или в нескольких файлах JavaScript. Однако особенность языка JavaScript заключается в том, что последняя объявленная переменная перезаписывает ранее объявленную переменную. Переменные с одинаковыми именами требуют от нас обратить внимание на проблему повторных объявлений. То есть каждый раз, когда мы объявляем объект пространства имен, рекомендуется сначала определить, существует ли уже этот объект пространства имен, как показано в коде 5-. 15:
Код 5-15:
Скопируйте код кода следующим образом:
if (typeof com.anyjava == «не определено») var com.anyjava = {};
Таким образом, мы можем гарантировать, что объект «com.anyjava» будет объявлен только один раз.