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

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

Жанры

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, возвращающий объект, который

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

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

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

Том 3. Рассказы 1896-1899

Горький Максим
3. Собрание сочинений в тридцати томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 3. Рассказы 1896-1899

Хозяин Теней 5

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

Глава рода

Шелег Дмитрий Витальевич
5. Живой лёд
Фантастика:
боевая фантастика
6.55
рейтинг книги
Глава рода

Наследие Маозари 8

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

Император Пограничья 1

Астахов Евгений Евгеньевич
1. Император Пограничья
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Император Пограничья 1

Играть... в тебя

Зайцева Мария
3. Звериные повадки Симоновых
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Играть... в тебя

Камень. Книга шестая

Минин Станислав
6. Камень
Фантастика:
боевая фантастика
7.64
рейтинг книги
Камень. Книга шестая

Романов. Том 1 и Том 2

Кощеев Владимир
1. Романов
Фантастика:
фэнтези
попаданцы
альтернативная история
5.25
рейтинг книги
Романов. Том 1 и Том 2

Двойник Короля 7

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

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Группа крови на рукаве

Вязовский Алексей
1. ГК
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.40
рейтинг книги
Группа крови на рукаве

Эволюционер из трущоб. Том 9

Панарин Антон
9. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 9

Иной. Том 1. Школа на краю пустыни

Amazerak
1. Иной в голове
Фантастика:
боевая фантастика
рпг
аниме
5.75
рейтинг книги
Иной. Том 1. Школа на краю пустыни

Локки 6. Потомок бога

Решетов Евгений Валерьевич
6. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Локки 6. Потомок бога