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

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

Жанры

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.00
рейтинг книги
Рассвет русского царства

Чужак из ниоткуда 2

Евтушенко Алексей Анатольевич
2. Чужак из ниоткуда
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужак из ниоткуда 2

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

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

Отверженный. Дилогия

Опсокополос Алексис
Отверженный
Фантастика:
фэнтези
7.51
рейтинг книги
Отверженный. Дилогия

Слово мастера

Лисина Александра
11. Гибрид
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Слово мастера

Зодчий. Книга III

Погуляй Юрий Александрович
3. Зодчий Империи
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Зодчий. Книга III

Лекарь Империи 9

Карелин Сергей Витальевич
9. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
5.00
рейтинг книги
Лекарь Империи 9

Цикл "Идеальный мир для Лекаря". Компиляция. Книги 1-30

Сапфир Олег
Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Цикл Идеальный мир для Лекаря. Компиляция. Книги 1-30

Артефактор. Возвращение блудного императора

Седых Александр Иванович
2. Артефактор
Фантастика:
фэнтези
боевая фантастика
4.33
рейтинг книги
Артефактор. Возвращение блудного императора

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

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

Брак по-драконьи

Ардова Алиса
Фантастика:
фэнтези
8.60
рейтинг книги
Брак по-драконьи

Вампилов

Румянцев Андрей Григорьевич
1546. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Вампилов

Рядовой. Назад в СССР. Книга 1

Гаусс Максим
1. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Рядовой. Назад в СССР. Книга 1

Глубокий космос

Вайс Александр
9. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Глубокий космос