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

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

Жанры

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

* Возвращает новый объект, содержащий свойства, присутствующие сразу в обоих

* объектах, о или р. Результат чем-то напоминает пересечение о и р,

* но значения свойств объекта р отбрасываются */

function intersection(o, р) { return restrict(extend({}, о), р); }

/*

* Возвращает массив имен собственных перечислимых свойств объекта о.

*/

function keys(o) {

if (typeof
о !== "object”) throw ТуреЕггогО; // Apr. должен быть объектом

var result = []; // Возвращаемый массив

for(var prop in о) { // Для всех перечислимых свойств

if (о.hasOwnProperty(prop)) // Если это собственное свойство,

result.push(prop); // добавить его в массив array.

}

return result; // Вернуть массив.

}

В дополнение к циклу

for/in
стандарт ECMAScript 5 определяет две функции, перечисляющие имена свойств. Первая из них,
Object.keys,
возвращает массив имен собственных перечислимых свойств объекта. Она действует аналогично функции
keys
из примера 6.2.

Вторая функция ECMAScript 5, выполняющая перечисление свойств, -

Object.getOwnPropertyNames.
Она действует подобно функции
Object.keys,
но возвращает имена всех собственных свойств указанного объекта, а не только перечислимые. В реализациях ECMAScript 3 отсутствует возможность реализовать подобные функции, потому что ECMAScript 3 не предусматривает возможность получения неперечислимых свойств объекта.

6.6. Методы чтения и записи свойств

Выше уже говорилось, что свойство объекта имеет имя, значение и набор атрибутов. В ECMAScript 5 [10]

значение может замещаться одним или двумя методами, известными как методы чтения (

getter
) и записи (
setter
). Свойства, для которых определяются методы чтения и записи, иногда называют свойствами с методами доступа, чтобы отличать их от свойств с данными, представляющих простое значение.

10

И в последних версиях реализации стандарта ECMAScript 3 в основных броузерах, кроме IE.

Когда программа пытается получить значение свойства с методами доступа, интерпретатор вызывает метод чтения (без аргументов). Возвращаемое этим методом значение становится значением выражения обращения к свойству. Когда программа пытается записать значение в свойство, интерпретатор вызывает метод записи, передавая ему значение, находящее справа от оператора присваивания. Этот метод отвечает за «установку» значения свойства. Значение, возвращаемое методом записи,

игнорируется.

В отличие от свойств с данными, свойства с методами доступа не имеют атрибута

writable
. Если свойство имеет оба метода, чтения и записи, оно доступно для чтения/записи. Если свойство имеет только метод чтения, оно доступно только для чтения. А если свойство имеет только метод записи, оно доступно только для записи (такое невозможно для свойств с данными) и попытки прочитать значение такого свойства всегда будут возвращать
undefined
.

Самый простой способ определить свойство с методами доступа заключается в использовании расширенного синтаксиса определения литералов объектов:

var о = {

// Обычное свойство с данными

data_prop: value,

// Свойство с методами доступа определяется как пара функций

get accessor_prop { /* тело функции */ },

set accessor_prop(value) { /* тело функции */ }

};

Свойства с методами доступа определяются как одна или две функции, имена которых совпадают с именем свойства и с заменой ключевого слова

function
на
ge
t и/или
set
. Обратите внимание, что не требуется использовать двоеточие для отделения имени свойства от функции, управляющей доступом к свойству, но по-прежнему необходимо использовать запятую после тела функции, чтобы отделить метод от других методов или свойств с данными. Для примера рассмотрим следующий объект, представляющий Декартовы координаты точки на плоскости. Для представления координат X и Y в нем имеются обычные свойства с данными, а также свойства с методами доступа, позволяющие получить эквивалентные полярные координаты точки:

var р = {

// х и у - обычные свойства с данными, доступные для чтения/записи.

х: 1.0,

у: 1.0,

//r - доступное для чтения/записи свойство с двумя методами доступа.

// Не забывайте добавлять запятые после методов доступа,

get r { return Math.sqrt(this.x*this.x + this.y*this.y); },

set r(newvalue) {

var oldvalue = Math.sqrt(this.x*this.x + this.y*this.y);

var ratio = newvalue/oldvalue;

this.x *= ratio;

this.у *= ratio;

}

// theta - доступное только для чтения свойство с единственным методом чтения,

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

Том 2. Советская литература

Луначарский Анатолий Васильевич
2. Собрание сочинений в восьми томах
Документальная литература:
критика
5.00
рейтинг книги
Том 2. Советская литература

Неудержимый. Книга VI

Боярский Андрей
6. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга VI

Гражданская война 1918-1921 гг. — урок для XXI века

Кара-Мурза Сергей Георгиевич
Научно-образовательная:
политика
5.00
рейтинг книги
Гражданская война 1918-1921 гг. — урок для XXI века

Тайные силы в истории России

Бегунов Юрий Константинович
Документальная литература:
публицистика
5.00
рейтинг книги
Тайные силы в истории России

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

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

Ночные всадники. Нарушители закона. Чертово болото

Кэллэм Ридгуэлл
Приключения:
вестерны
6.25
рейтинг книги
Ночные всадники. Нарушители закона. Чертово болото

Форма. Стиль. Выражение

Лосев Алексей Федорович
Научно-образовательная:
философия
5.00
рейтинг книги
Форма. Стиль. Выражение

Эйнштейн. Его жизнь и его Вселенная

Айзексон Уолтер
Документальная литература:
биографии и мемуары
5.50
рейтинг книги
Эйнштейн. Его жизнь и его Вселенная

Хроники Элении (сборник)

Эддингс Дэвид
Шедевры фантастики
Фантастика:
фэнтези
7.86
рейтинг книги
Хроники Элении (сборник)

Кодекс Охотника. Книга XVIII

Винокуров Юрий
18. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга XVIII

Кто изобрел современную физику? От маятника Галилея до квантовой гравитации

Горелик Геннадий
Научно-образовательная:
история
физика
6.25
рейтинг книги
Кто изобрел современную физику? От маятника Галилея до квантовой гравитации

Civilization

Коллингвуд Виктор
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Civilization

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

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

Ткущая. Обманутые секунды

Тарасова Анна
3. Ткущая
Любовные романы:
любовно-фантастические романы
8.27
рейтинг книги
Ткущая. Обманутые секунды