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 {
Поделиться:
Популярные книги
Пески времени
Детективы:
триллеры
9.02
рейтинг книги
Родословная. Том 5
5. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Я все еще князь. Книга XXI
21. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IХ
9. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гром Раскатного. Том 1
1. Штормовой Предел
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Императора VI
6. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Бастард Императора. Том 9
9. Бастард Императора
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Поход
4. Ермак
Фантастика:
боевая фантастика
альтернативная история
6.25
рейтинг книги
Темный Лекарь 9
9. Темный Лекарь
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
История Шотландии с древнейших времен до флодденского сражения 1513 года.
Научно-образовательная:
история
5.00
рейтинг книги
Кодекс Охотника. Книга XVII
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
И в аду есть герои
5. Тайный Город
Фантастика:
боевая фантастика
9.19
рейтинг книги
Наномашины, наследник! Том 9
9. Первый среди карапузов
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 12
12. Антимаг. Вне системы
Фантастика:
фэнтези
5.00