Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

function objectld(o) { /* ... */ }

var nextId = 1;

// Общедоступным API этого модуля является функция-конструктор Set.

// Нам необходимо экспортировать эту функцию за пределы частного

// пространства имен, чтобы ее можно было использовать за ее пределами.

// В данном случае конструктор экспортируется за счет передачи его

//
в виде возвращаемого значения. Он становится присваиваемым значением

// в выражении в первой строке выше, return Set;

}); // Вызвать функцию сразу после ее объявления.

Обратите внимание, что такой прием вызова функции сразу после ее определения является характерным для языка JavaScript. Программный код, выполняемый в частном пространстве имен, предваряется текстом

«(function {
» и завершается «
});
». Открывающая круглая скобка в начале сообщает интерпретатору, что это выражение определения функции, а не инструкция, поэтому в префикс можно добавить любое имя функции, поясняющее ее назначение. В примере 9.24 было использовано имя «
invocation
», чтобы подчеркнуть, что функция вызывается сразу же после ее объявления. Точно так же можно было бы использовать имя «
namespace
», чтобы подчеркнуть, что функция играет роль пространства имен.

После того как модуль окажется заперт внутри функции, ему необходим некоторый способ экспортировать общедоступный API для использования за пределами функции модуля. В примере 9.24 функция модуля возвращает конструктор, который тут же присваивается глобальной переменной. Сам факт возврата значения из функции ясно говорит о том, что оно экспортируется за пределы области видимости функции. Модули, определяющие более одного элемента API, могут возвращать объект пространства имен. Для нашего модуля с классами множеств можно было бы написать такой программный код:

// Создает единственную глобальную переменную, хранящую все модули,

// имеющие отношение к коллекциям

var collections;

if (!collections) collections = {};

// Теперь определить модуль sets

collections.sets = (function namespace {

// Здесь находятся определения различных классов множеств,

// использующих локальные переменные и функции

// ... Большая часть программного кода опущена...

// Экспортировать API в виде возвращаемого объекта пространства имен

return {

// Экспортируемое имя свойства : имя локальной переменной

AbstractSet: AbstractSet,

NotSet: NotSet,

AbstractEnumerableSet: AbstractEnumerableSet,

SingletonSet: SingletonSet,

AbstractWritableSet: AbstractWritableSet,

ArraySet: ArraySet

};

});

Можно

предложить похожий прием, определив функцию модуля как конструктор, который будет вызываться с ключевым словом
new
и экспортировать значения за счет их присваивания:

var collections;

if (!collections) collections = {};

collections.sets = (new function namespace {

// ... Большая часть программного кода опущена ...

// Экспортировать API в объекте this

this.AbstractSet = AbstractSet;

this.NotSet = NotSet; // И так далее...

// Обратите внимание на отсутствие возвращаемого значения.

});

Если объект глобального пространства имен уже определен, функция модуля может просто присваивать значения свойствам этого объекта и вообще ничего не возвращать:

var collections;

if (!collections) collections = {};

collections.sets = {};

(function namespace {

// ... Большая часть программного кода опущена ...

// Экспортировать общедоступный API в объект пространства имен, созданный выше

collections.sets.AbstractSet = AbstractSet;

collections.sets.NotSet = NotSet; // И так далее...

// Инструкция return не требуется, потому что экспортирование выполняется выше.

});

Фреймворки, реализующие инструменты загрузки модулей, могут предусматривать собственные методы экспортирования API модулей. Внутри модуля может определяться функция

provides,
которая выполняет регистрацию его API, или объект
exports
, в котором модуль должен сохранять свой API. Пока в языке JavaScript отсутствуют инструменты управления модулями, вам придется использовать средства создания и экспортирования модулей, которые лучше подходят для используемой вами библиотеки инструментов.

Поделиться:
Популярные книги

Обнаженный бизнес

Брэнсон Ричард
Документальная литература:
биографии и мемуары
8.20
рейтинг книги
Обнаженный бизнес

Неучтенный элемент. Том 1

NikL
1. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
5.75
рейтинг книги
Неучтенный элемент. Том 1

Второгодка. Книга 2. Око за око

Ромов Дмитрий
2. Второгодка
Фантастика:
героическая фантастика
альтернативная история
фэнтези
5.00
рейтинг книги
Второгодка. Книга 2. Око за око

Князь Вольдемар Старинов. Книга вторая. Чужая война

Садов Сергей Александрович
2. Князь Вольдемар Старинов
Фантастика:
фэнтези
9.31
рейтинг книги
Князь Вольдемар Старинов. Книга вторая. Чужая война

Точка Бифуркации V

Смит Дейлор
5. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Точка Бифуркации V

Письма

Пелусиот Исидор
Религия и эзотерика:
религия
5.00
рейтинг книги
Письма

Мифы и правда о плане Барбаросса

Веремеев Юрий Георгиевич
Анатомия армии
Научно-образовательная:
история
5.00
рейтинг книги
Мифы и правда о плане Барбаросса

Кодекс Охотника. Книга XVI

Винокуров Юрий
16. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVI

"Фантастика 2023-193". Компиляция. Книги 1-24

Федоров Алексей Евгеньевич
Фантастика 2023. Компиляция
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Фантастика 2023-193. Компиляция. Книги 1-24

Газлайтер. Том 19

Володин Григорий Григорьевич
19. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
6.25
рейтинг книги
Газлайтер. Том 19

Барон меняет правила

Ренгач Евгений
2. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон меняет правила

Открывая организации будущего

Лалу Фредерик
Деловая литература:
о бизнесе популярно
деловая литература
корпоративная культура
5.00
рейтинг книги
Открывая организации будущего

1421 - год, когда Китай открыл мир

Гевин Мензис
Тайны древних цивилизаций
Научно-образовательная:
история
прочая научная литература
6.25
рейтинг книги
1421 - год, когда Китай открыл мир

Кодекс Охотника. Книга XXV

Винокуров Юрий
25. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга XXV