JavaScript. Подробное руководство, 6-е издание
Шрифт:
for(var і = 0; і < arguments.length; i++) { // Для каждого аргумента
var str = Set._v2s(arguments[i]); // Отобразить в строку
if (this.values.hasOwnProperty(stг)) { // Если присутствует в множ,
delete this.values[str]; // Удалить
this.n--; // Уменьшить размер множества
}
}
return this; //
Для поддержки цепочек вызовов методов
}
// Возвращает true, если множество содержит value; иначе возвращает false.
Set.prototype.contains = function(value) {
return this.values.has0wnProperty(Set._v2s(value));
};
// Возвращает размер множества.
Set.prototype.size = function { return this.n; };
// Вызывает функцию f в указанном контексте для каждого элемента множества.
Set.prototype.foreach = function(f, context) {
for(var s in this.values) // Для каждой строки в множестве
if (this.values.hasOwnProperty(s)) // Пропустить унаследов. свойства
f.call(context. this.values[s]); // Вызвать f для значения
};
// Функция для внутреннего использования. Отображает любые значения JavaScript
// в уникальные строки.
Set._v2s = function(val) {
switch(val) {
case undefined: return 'u'; // Специальные простые значения
case null: return 'n'; // отображаются в односимвольные строки.
case true: return 't';
case false: return 'f;
default: switch(typeof val) {
case 'number': return + val; // Числа получают префикс #.
case 'string': return "" + val; // Строки получают префикс ".
default: return '@' + objectId(val); //
Объекты и функции - @
}
}
// Для любого объекта возвращается строка. Для разных объектов эта функция
// будет возвращать разные строки, а для одного и того же объекта всегда
// будет возвращать одну и ту же строку. Для этого в объекте о создается свойство.
// В ES5 это свойство можно сделать неперечислимым и доступным только для чтения,
function objectld(o) {
var prop = "I **objectid**|”; // Имя частного идентификац. свойства
if (!о.hasOwnProperty(prop)) // Если объект не имеет этого свойства
о[ргор] = Set._v2s.next++; // Присвоить ему след, доступ, значение
return о[ргор]; // Вернуть идентификатор
}
};
Set._v2s.next = 100; // Начальное значение для идентификаторов объектов.
9.6.2. Пример: типы-перечисления
Перечислениями называются типы, которые могут принимать конечное количество значений, объявляемых (или «перечисляемых») при определении типа.
В языке С и его производных типы-перечисления объявляются с помощью ключевого слова
enum
. В ECMAScript 5 enum
– это зарезервированное (но не используемое) слово, оставленное на тот случай, если когда-нибудь в JavaScript будут реализованы встроенные типы-перечисления. А пока в примере 9.7 демонстрируется, как можно определить собственный тип-перечисление на языке JavaScript. Обратите внимание, что здесь используется функция inherit
из примера 6.1. Пример 9.7 содержит единственную функцию
enumeration.
Однако она не является конструктором: она не определяет класс с именем «enumeration». Но она является фабричной функцией: при каждом вызове она создает и возвращает новый класс. Ниже показано, как ее можно использовать:
// Создать новый класс Coin с четырьмя возможными значениями:
// Coin.Penny, Coin.Nickel и т. д.
Поделиться:
Популярные книги
Воронцов. Перезагрузка
1. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
5.50
рейтинг книги
Политическая история Римской империи
Историческая библиотека
Научно-образовательная:
история
5.00
рейтинг книги
Я - обычный
Фантастика:
боевая фантастика
ужасы и мистика
7.17
рейтинг книги
Курс 1. Сентябрь
1. Маркатис
Фантастика:
аниме
фэнтези
сказочная фантастика
5.00
рейтинг книги
Адепт
4. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.25
рейтинг книги
Точка Бифуркации III
3. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга II
2. Неудержимый
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Немецкие танки в бою
1. Танки в бою
Документальная литература:
прочая документальная литература
5.75
рейтинг книги
Я спас СССР! том 2
2. Я спас СССР
Фантастика:
альтернативная история
5.62
рейтинг книги
Третий. Том 3
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.25
рейтинг книги
Периферийная империя: циклы русской истории
Политический бестселлер
Научно-образовательная:
история
политика
5.00
рейтинг книги
Кar
5.00
рейтинг книги
Статьи в журнале "Русская Жизнь"(v.1.1)
Научно-образовательная:
политика
5.00
рейтинг книги
Мать (CИ)
5.00