function extend(o, р) {
fоr(ргор in р) { // Для всех свойств в р.
о[ргор] = р[prop]; // Добавить свойство в о.
}
return о;
}
/*
* Копирует перечислимые свойства из объекта р в объект о и возвращает о.
* Если о и р имеют свойства с одинаковыми именами, значение свойства
* в объекте о остается неизменным.
* Эта функция не учитывает наличие методов доступа и не копирует атрибуты.
*/
function merge(o, р) {
fоr(ргор in р) { // Для всех свойств в р.
if (о.hasOwnProperty[prop]) continue; // Кроме имеющихся в о.
о[prop] = р[prop]; // Добавить свойство в о.
}
return о;
}
/*
* Удаляет из объекта о свойства, отсутствующие в объекте р.
* Возвращает о.
*/
function restricts, р) {
fоr(prop in о) { // Для всех свойств в о
if (!(prop in р)) delete о[prop]; // Удалить, если отсутствует в р
}
return о;
}
/*
* Удаляет из объекта о свойства, присутствующие в объекте р. Возвращает о.
*/
function subtracts, р) {
for(prop in р) { // Для всех свойств в р
delete о[ргор]; // Удалить из о (удаление несуществующих
// свойств можно выполнять без опаски)
}
return о;
}
/*
* Возвращает новый объект, содержащий свойства, присутствующие хотя бы в одном
* из объектов, о или р. Если оба объекта, о и р, имеют свойства с одним
* и тем же именем, используется значение свойства из объекта р.
*/
function union(o,p) { return extend(extend({},о), p); }
/*
* Возвращает новый объект, содержащий свойства, присутствующие сразу в обоих
* объектах, о или р. Результат чем-то напоминает пересечение о и р,
* но значения свойств объекта р отбрасываются */
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] И в последних версиях реализации стандарта ECMAScript 3 в основных броузерах, кроме IE.
значение может замещаться одним или двумя методами, известными как методы чтения ( getter
) и записи ( setter
). Свойства, для которых определяются методы чтения и записи, иногда называют свойствами с методами доступа, чтобы отличать их от свойств с данными, представляющих простое значение.
Когда программа пытается получить значение свойства с методами доступа, интерпретатор вызывает метод чтения (без аргументов). Возвращаемое этим методом значение становится значением выражения обращения к свойству. Когда программа пытается записать значение в свойство, интерпретатор вызывает метод записи, передавая ему значение, находящее справа от оператора присваивания. Этот метод отвечает за «установку» значения свойства. Значение, возвращаемое методом записи, игнорируется.
Читать дальше
Конец ознакомительного отрывка
Купить книгу