Модуль Class, использовавшийся в примере 10.1, представляет собой просто на_ бор согласованных вспомогательных функций. Однако нет никаких ограниче_ ний на иную организацию модуля. Он может состоять из единственной функ_ ции, объявлять JavaScript_класс или даже набор классов и функций.
В примере 10.2 приводится фрагмент программного кода, который создает мо_ дуль, состоящий из единственного класса. Данный модуль использует наш гипо_ тетический модуль Class и функцию define(). (Если вы забыли, для чего предна_ значена эта функция, обратитесь к примеру 9.10.)
Пример 10.2. Класс комплексных чисел в виде модуля
/**
* com/davidflanagan/Complex.js: класс, реализующий представление комплексных чисел
*
* Данный модуль определяет функцию_конструктор com.davidflanagan.Complex()
* Использует модуль com/davidflanagan/Class.js
**/
// Прежде всего необходимо проверить присутствие модуля Class
var com; // Объявляется глобальный символ перед проверкой его наличия if (!com || !com.davidflanagan || !com.davidflanagan.Class)
throw new Error("com/davidflanagan/Class.js не был загружен");
// В результате проведенной проверки мы выяснили, что пространство имен
// com.davidflanagan существует, поэтому нам не нужно создавать его.
// Достаточно просто объявить класс Complex внутри этого пространства com.davidflanagan.Complex = com.davidflanagan.Class.define({
return new com.davidflanagan.Complex(this.x + c.x, this.y + c.y);
}
},
});
Существует также возможность определить модуль, состоящий более чем из од_ ного класса. В примере 10.3 приводится пример модуля, который определяет различные классы, представляющие геометрические фигуры.
Пример 10.3. Модуль классов, представляющих геометрические фигуры
/**
* com/davidflanagan/Shapes.js: модуль классов, представляющих геометрические фигуры
*
* Данный модуль объявляет классы в пространстве имен com.davidflanagan.shapes
* Использует модуль com/davidflanagan/Class.js
**/
// Прежде всего необходимо проверить наличие модуля Class
var com; // Объявляется глобальный символ перед проверкой его наличия if (!com || !com.davidflanagan || !com.davidflanagan.Class)
throw new Error("com/davidflanagan/Class.js не был загружен");
// Импортировать символ из этого модуля
var define = com.davidflanagan.Class.define;
// В результате проведенной проверки мы выяснили, что пространство имен
// com.davidflanagan существует, поэтому нам не нужно создавать его.
// Достаточно просто создать пространство имен с фигурами
if (com.davidflanagan.shapes)
throw new Error("пространство имен com.davidflanagan.shapes существует");
// Создать пространство имен com.davidflanagan.shapes = {};