Как скопировать свойства одного объекта в другой?

Рейтинг: 1Ответов: 2Опубликовано: 23.11.2014

Реализовать функцию extend(obj1, obj2), которая скопирует свойства из объекта obj2 в объект obj1. Функция должна возвращать obj1. Значения одинаковых ключей должны перетирать оригинальные. Пример:

extend({foo: 'bar', baz: 1}, {foo: true, zoop: 0}); // {foo: true, baz: 1, zoop: 0}

Думал сделать через какой-то метод, но не нашел...
Читал-читал про методы, но нигде не увидел, как скопировать свойства одного в другой.

Ответы

▲ 1

Здесь приведен код для копирования объекта со всеми свойствами. Внимание: если в свойстве будет объект, то его свойства не будут скопированы, для "глубокого" копирования нужно применять рекурсию:

function extend(obj1, obj2){
    for (key in obj2){
      obj1[key]=obj2[key];
    }
    return obj1;
}
▲ 1

См., например, как это сделано (метод extend()) в библиотеке Underscore:

  _.extend = function(obj) {
    if (!_.isObject(obj)) return obj;
    var source, prop;
    for (var i = 1, length = arguments.length; i < length; i++) {
      source = arguments[i];
      for (prop in source) {
        if (hasOwnProperty.call(source, prop)) {
            obj[prop] = source[prop];
        }
      }
    }
    return obj;
  };