Честно говоря, непонятно, почему до сих пор в стандарт языка ECMAScript не внесены две часто нужные вещи: клонирование объекта и «наложение» одного объекта на другой. Помимо прочего, полноценная реализация этих методов возможна только на уровне движка, но нет же — приходится довольствоваться скриптовыми велосипедами от различных библиотек или писать свой.
Ниже мой вариант с пояснениями.