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

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

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

Object.freeze(enumeration.values);

Object.freeze(enumeration);

Обратите внимание, что применение функции

Object.freeze
к типу перечисления исключает возможность использования свойства
objectId
, как было показано в примере 9.17. Решение этой проблемы состоит в том, чтобы прочитать значение свойства
objectId
(вызвать соответствующий метод чтения и установить внутреннее
свойство) перечисления только один раз, перед тем как его зафиксировать.

9.8.5. Подклассы и ECMAScript 5

В примере 9.22 демонстрируется порядок создания подклассов с использованием возможностей ECMAScript 5. В нем определяется класс

stringSet,
наследующий класс
AbstractWritableSet
из примера 9.16. Основная особенность этого примера заключается в использовании функции
Object.сreate
для создания объекта-прототипа, наследующего прототип суперкласса, и в определении свойств вновь созданного объекта. Как уже отмечалось выше, основная сложность этого подхода заключается в необходимости использовать неудобные дескрипторы свойств.

Другой интересной особенностью этого примера является передача значения null функции

Object.сreate
при создании объекта, не наследующего ничего. Этот объект используется для хранения элементов множества, а тот факт, что он не имеет прототипа, позволяет вместо метода
hasOwnProperty
использовать оператор
in
.

Пример 9.22.

StringSet
: определение подкласса множества с использованием ECMAScript 5

function StringSet {

this.set = Object.create(null); // Создать объект без прототипа

this.n = 0;

this.add.apply(this, arguments);

}

// Обратите внимание, что Object.create позволяет обеспечить наследование

// прототипа суперкласса и определить методы за счет единственного вызова.

// Поскольку при создании свойств мы не указываем значения атрибутов writable,

// enumerable и configurable, они по умолчанию получают значение false.

// Доступность методов только для чтения усложняет их переопределение в подклассах.

StringSet.prototype = Object.create(AbstractWritableSet.prototype, {

constructor: { value: StringSet },

contains: { value: function(x) { return x in this.set; } }.

size: { value: function(x) { return this.n; } },

foreach: { value: function(f,c) { Object.keys(this.set).forEach(f.c); } }.

add: {

value: function {

for(var
і = 0; і < arguments.length; i++) {

if (!(arguments[i] in this.set)) {

this.set[arguments[i]] = true;

this.n++;

}

}

return this;

}

),

remove: {

value: function {

for(var і = 0; і < arguments.length; i++){

if (arguments[i] in this.set) {

delete this.set[arguments[i]];

this, n--;

}

}

return this;

}

}

});

9.8.6. Дескрипторы свойств

В разделе 6.7 дается описание дескрипторов свойств, введенных стандартом ECMAScript 5, но там отсутствуют примеры, демонстрирующие различные случаи их использования. Мы завершим этот раздел, посвященный особенностям ECMAScript 5, расширенным примером, демонстрирующим многие операции со свойствами, допустимые в ECMAScript 5. Программный код в примере 9.23 добавляет в

Object.prototype
метод
properties
(разумеется, недоступный для перечисления). Значение, возвращаемое этим методом, является объектом, представляющим список свойств и обладающим полезными методами для отображения свойств и атрибутов (которые могут пригодиться при отладке). Его можно использовать для получения дескрипторов свойств (на случай, если потребуется реализовать копирование свойств вместе с их атрибутами) и для установки атрибутов свойств (благодаря чему он может использоваться как альтернатива функциям
hideProps
и
freezeProps,
объявленным ранее). Этот единственный пример демонстрирует большинство особенностей свойств в ECMAScript 5, а также применение методики модульного программирования, о которой будет рассказываться в следующем разделе.

Пример 9.23. Особенности свойств в ECMAScript 5

/*

* Определяет метод properties в Object.prototype, возвращающий объект, который

* представляет указанные свойства объекта, относительно которого был вызван метод

* (или все собственные свойства объекта, если метод был вызван без аргументов).

Поделиться:
Популярные книги

Последний реанорец. Том I и Том II

Павлов Вел
1. Высшая Речь
Фантастика:
фэнтези
7.62
рейтинг книги
Последний реанорец. Том I и Том II

Хозяин Теней

Петров Максим Николаевич
1. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней

На границе империй. Том 10. Часть 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 6

Мастер Трав III

Мордорский Ваня
3. Мастер Трав
Фантастика:
фэнтези
рпг
фантастика: прочее
попаданцы
5.75
рейтинг книги
Мастер Трав III

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

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

Чехов книга 3

Гоблин (MeXXanik)
3. Адвокат Чехов
Фантастика:
попаданцы
альтернативная история
аниме
6.00
рейтинг книги
Чехов книга 3

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

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

Третий. Том 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 3

Страж Кодекса. Книга VI

Романов Илья Николаевич
6. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга VI

Перешагнуть пропасть

Муравьёв Константин Николаевич
1. Перешагнуть пропасть
Фантастика:
боевая фантастика
космическая фантастика
8.38
рейтинг книги
Перешагнуть пропасть

Наномашины, Кошмар Академии! Том 10

Новиков Николай Васильевич
10. Первый среди карапузов
Фантастика:
аниме
попаданцы
5.00
рейтинг книги
Наномашины, Кошмар Академии! Том 10

Ким

Киплинг Редьярд Джозеф
Приключения:
исторические приключения
7.62
рейтинг книги
Ким

Его звали Тони. Книга 5

Кронос Александр
5. Щенки косуль
Фантастика:
городское фэнтези
технофэнтези
попаданцы
7.00
рейтинг книги
Его звали Тони. Книга 5

Эпоха Опустошителя. Том V

Павлов Вел
5. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том V