Шрифт:
*/
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)) // Если это собственное свойство,