Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание
- Название:JavaScript. Подробное руководство, 6-е издание
- Автор:
- Жанр:
- Издательство:Символ-Плюс
- Год:2012
- Город:СПб
- ISBN:978-5-93286-215-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание краткое содержание
Эта книга - одновременно и руководство программиста, и полноценный справочник по базовому языку JavaScript и клиентским прикладным интерфейсам, предоставляемым веб-броузерами.
JavaScript. Подробное руководство, 6-е издание - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
После того как модуль окажется заперт внутри функции, ему необходим некоторый способ экспортировать общедоступный 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 отсутствуют инструменты управления модулями, вам придется использовать средства создания и экспортирования модулей, которые лучше подходят для используемой вами библиотеки инструментов.
10
Шаблоны и регулярные выражения
Регулярное выражение - это объект, описывающий символьный шаблон. Класс RegExp
в JavaScript представляет регулярные выражения, а объекты классов String
и RegExp
определяют методы, использующие регулярные выражения для выполнения поиска по шаблону и операций поиска в тексте с заменой. Грамматика регулярных выражений в языке JavaScript содержит достаточно полное подмножество синтаксиса регулярных выражений, используемого в языке Perl 5, поэтому, если вы имеете опыт работы с языком Perl, то вы без труда сможете описывать шаблоны в программах на языке JavaScript. [10] 19 В число особенностей регулярных выражений языка Perl, которые не поддерживаются в ECMAScript, входят флаги s (однострочный режим) и х (расширенный синтаксис); управляющие последовательности \а, \е, \1, \и, \L, \U, \Е, \(), \А, \Z, \z и \G; якорь (?<= позитивной ретроспективной проверки и якорь (?
)
Эта глава начинается с определения синтаксиса, посредством которого в регулярных выражениях описываются текстовые шаблоны. Затем мы перейдем к описанию тех методов классов String
и RegExp
, которые используют регулярные выражения.
10.1. Определение регулярных выражений
В JavaScript регулярные выражения представлены объектами RegExp
. Объекты RegExp
могут быть созданы посредством конструктора RegExp(),
но чаще они создаются с помощью специального синтаксиса литералов. Так же как строковые литералы задаются в виде символов, заключенных в кавычки, литералы регулярных выражений задаются в виде символов, заключенных в пару символов слэша (/). Таким образом, JavaScript-код может содержать строки, похожие на эту:
var pattern = /s$/;
Эта строка создает новый объект RegExp
и присваивает его переменной pattern
. Данный объект RegExp
ищет любые строки, заканчивающиеся символом «s». Это же регулярное выражение может быть определено с помощью конструктора RegExp():
var pattern = new RegExp("s$");
Спецификация шаблона регулярного выражения состоит из последовательности символов. Большая часть символов, включая все алфавитно-цифровые, буквально описывают символы, которые должны присутствовать. То есть регулярное выражение /java/
совпадает со всеми строками, содержащими подстроку «java». Другие символы в регулярных выражениях не предназначены для поиска их точных эквивалентов, а имеют особое значение. Например, регулярное выражение /s$/
содержит два символа. Первый символ, s
, обозначает поиск буквального символа. Второй, $
, - это специальный метасимвол, обозначающий конец строки. Таким образом, это регулярное выражение соответствует любой строке, заканчивающейся символом s.
В следующих разделах описаны различные символы и метасимволы, используемые в регулярных выражениях в языке JavaScript.
Литералы простых типов, таких как строки и числа, интерпретируются как одни и те же значения, где бы они ни встретились в программе. Литералы объектов (или инициализаторы), такие как {}
и []
, каждый раз создают новые объекты. Если поместить инструкцию var а = [ ]
в тело цикла, например, в каждой итерации цикла будет создаваться новый пустой массив.
Интервал:
Закладка: