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

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

Жанры

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

get theta { return Math.atan2(this.у, this.x); }

};

Обратите внимание на использование ключевого слова

this
в методах чтения и записи выше. Интерпретатор будет вызывать эти функции, как методы объекта, в котором они определены, т.е. в теле функции
this
будет ссылаться на объект точки. Благодаря этому метод чтения свойства r может ссылаться на свойства x и у, как
this.x
и
this.у
. Подробнее о методах и ключевом слове
this
рассказывается в разделе 8.2.2.

Свойства с методами доступа наследуются так же, как обычные свойства с данными, поэтому объект

р
, определенный выше, можно использовать как прототип для других объектов точек. В новых объектах можно определять собственные свойства х и у, и они будут наследовать свойства
r
и
theta
:

var q = inherit(p); // Создать новый объект, наследующий методы доступа

q.x = 1; q.y = 1; // Создать собственные свойства с данными в объекте q

console.log(q.r); // И использовать унаследованные свойства

console.log(q.theta); // с методами доступа

Фрагмент выше использует свойства с методами доступа для определения API, обеспечивающего представление единого набора данных в двух системах координат (Декартовой и полярной). Еще одной причиной использования свойств с методами доступа может быть необходимость проверки значения перед записью и возврат разных значений при каждом чтении свойства:

// Этот объект генерирует последовательность увеличивающихся чисел

var serialnum = {

// Это свойство с данными хранит следующее число в последовательности.

// Знак $ в имени свойства говорит о том, что оно является частным.

$n: 0,

// Возвращает текущее значение и увеличивает его

get next { return this.$n++; },

// Устанавливает новое значение n, но только если оно больше текущего

set next(n) {

if (n >= this.Sn) this.$n = n;

else throw "число может быть только увеличено ";

}

};

Наконец, ниже приводится еще один пример использования метода чтения для реализации свойства с «таинственным» поведением.

// Этот объект имеет свойства с методами доступа, при обращении к которым возвращаются

// случайные числа. Например, каждый раз при вычислении выражения ”random.octet"

// будет возвращаться случайное число в диапазоне от 0 до 255.

var random = {

get octet { return Math.floor(Math.random*256); },

get uint16 { return Math.floor(Math.random*65536); },

get int16 { return Math.floor(Math.random*65536)-32768; }

};

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

6.7. Атрибуты свойств

Помимо имени и значения свойства обладают атрибутами, определяющими их доступность для записи, перечисления и настройки. В ECMAScript 3 не предусматривается возможность изменения атрибутов: все свойства, создаваемые программами, выполняющимися под управлением реализации ECMAScript 3, доступны для записи, перечисления и настройки, и нет никакой возможности изменить эти атрибуты. Данный раздел описывает прикладной интерфейс (API), определяемый стандартом ECMAScript 5 для получения и изменения атрибутов свойств. Данный API имеет особое значение для разработчиков библиотек, потому что он позволяет:

• добавлять методы в объекты-прототипы и делать их неперечислимыми, подобно встроенным методам;

• «ограничивать» возможности объектов за счет определения свойств, которые не могут изменяться или удаляться.

Для целей данного раздела мы будем рассматривать методы чтения и записи свойств с методами как атрибуты свойств. Следуя этой логике, можно даже сказать, что значение свойства с данными также является атрибутом. Таким образом, свойства имеют имя и четыре атрибута. Четырьмя атрибутами свойств с данными являются: значение (

value
), признак доступности для записи (
writable
), признак доступности для перечисления (
enumerable
) и признак доступности для настройки (
configurable
). В свойствах с методами доступа отсутствуют атрибуты
value
и
writable
: их доступность для записи определяется наличием или отсутствием метода записи. Поэтому четырьмя атрибутами свойств с методами доступа являются: метод чтения (
get
), метод записи (
set
), признак доступности для перечисления (
enumerable
) и признак доступности для настройки (
configurable
).

Методы получения и записи значений атрибутов свойств, предусмотренные стандартом ECMAScript 5, используют объект, называемый дескриптором свойства (

property descriptor
), представляющий множество из четырех атрибутов. Объект дескриптора свойства обладает свойствами, имена которых совпадают с именами атрибутов свойства, которое он описывает. То есть объекты-дескрипторы свойств с данными имеют свойства с именами
value
,
writable
,
enumerable
и
configurable
. А дескрипторы свойств с методами доступа вместо свойств
value
и
writable
имеют свойства
get
и
set
. Свойства
writable
,
enumerable
и
configurable
являются логическими значениями, а свойства
get
и
set
– функциями.

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

Черный рынок

Вайс Александр
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Черный рынок

Геном хищника. Книга третья

Гарцевич Евгений Александрович
3. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга третья

Неправильный лекарь. Том 1

Измайлов Сергей
1. Неправильный лекарь
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неправильный лекарь. Том 1

Студиозус 2

Шмаков Алексей Семенович
4. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус 2

Воплощение Похоти 3

Некрасов Игорь
3. Воплощение Похоти
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Воплощение Похоти 3

Командор космического флота

Борчанинов Геннадий
3. Звезды на погонах
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Командор космического флота

Идеальный мир для Лекаря 21

Сапфир Олег
21. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 21

Печать зверя

Кас Маркус
7. Артефактор
Фантастика:
городское фэнтези
аниме
5.00
рейтинг книги
Печать зверя

ЖЛ 9

Шелег Дмитрий Витальевич
9. Живой лёд
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
ЖЛ 9

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

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

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

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

Я еще князь. Книга XX

Дрейк Сириус
20. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще князь. Книга XX

Треск штанов

Ланцов Михаил Алексеевич
6. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Треск штанов

Дочь моего друга

Тоцка Тала
2. Айдаровы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Дочь моего друга