Выбрать главу

  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.