JavaScript. Подробное руководство, 6-е издание
Шрифт:
}
}
);
/*
* AbstractEnumerableSet - абстрактный подкласс класса AbstractSet.
* Определяет абстрактные методы size и foreach и реализует конкретные
* методы isEmptyO. toArrayO, to[Locale]String и equals.
* Подклассы, реализующие методы contains, size и foreach,
* получают эти пять конкретных методов даром.
*/
var AbstractEnumerableSet = AbstractSet.extend(
function {
throw new Error("Нельзя создать экземпляр абстрактного класса");
},
{
size: abstractmethod,
fоreach: abstractmethod,
isEmpty: function { return this.size == 0; },
toString: function {
var s = і = 0;
this.foreach(function(v) {
if (i++ > 0) s += ", ";
s += v;
});
return s +
},
toLocaleString : function {
var s = "{", і = 0;
this.foreach(function(v) {
if (i++ > 0) s += ", "
if (v == null) s += v; // null и undefined
else s += v. toLocaleString; // все остальные
});
return s +
},
toArray: function {
var a = [];
this.foreach(function(v) { a.push(v); });
return a;
},
equals: function(that) {
if (!(that instanceof AbstractEnumerableSet)) return false;
// Если множество that имеет другой размер, множества не равны
if (this.size ! = that.sizeO) return false;
// Проверить наличие каждого элемента this в множестве that,
try {
this.foreach(function(v){
if (!that.contains(v)) throw false;}
);
return true; // Все элементы одинаковые: множества равны.
} catch (х) {
if (х === false) return false; // Множества не равны
throw х; // Повторно возбудить любое иное возникшее исключение.
}
}
});
/*
* SingletonSet - конкретный подкласс класса AbstractEnumerableSet.
* Множество из единственного элемента, доступное только для чтения.
*/
var SingletonSet = AbstractEnumerableSet.extend(
function SingletonSet(member) { this.member = member; },
{
contains: function(x) { return x === this.member; },
size: function { return 1; },
foreach: function(f,ctx) { f.call(ctx, this.member); }
}
);
/*
* AbstractWritableSet - абстрактный подкласс класса AbstractEnumerableSet.
* Определяет абстрактные методы add и remove и реализует конкретные
* методы union, intersection и difference.
*/
var AbstractWritableSet = AbstractEnumerableSet.extend(
function {
Поделиться:
Популярные книги
Кодекс Крови. Книга ХVII
17. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 6
6. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
На границе империй. Том 9. Часть 2
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Серые сутки
4. Медорфенов
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Тонкий расчет
Детективы:
триллеры
8.86
рейтинг книги
Хозяин Теней 6
6. Безбожник
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Осколки маски
7. Унесенный ветром
Фантастика:
боевая фантастика
альтернативная история
6.71
рейтинг книги
Белые погоны
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Младший сын
1. Государи московские
Научно-образовательная:
история
8.50
рейтинг книги
Моров. Том 5
4. Моров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Древесный маг Орловского княжества 9
9. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Черный Маг Императора 7 (CИ)
7. Черный маг императора
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 35
35. История Телепата
Фантастика:
аниме
боевая фантастика
фэнтези
5.00
рейтинг книги
Вечный. Книга IV
4. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00