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 {
Поделиться:
Популярные книги
На границе империй. Том 7. Часть 2
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 35
35. История Телепата
Фантастика:
аниме
боевая фантастика
фэнтези
5.00
рейтинг книги
Лекарь Империи 4
4. Лекарь Империи
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Вперед в прошлое 8
8. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Второгодка. Книга 5. Презренный металл
5. Второгодка
Фантастика:
городское фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Тринадцатый V
5. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 26
26. Лекарь
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Адептка второго плана
Попасть в историю
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Двойник короля 17
17. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXVII
27. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Травник
1. Травник
Фантастика:
фэнтези
5.00
рейтинг книги
Последний Паладин. Том 3
3. Путь Паладина
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга VII
7. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.75