Немає необхідності винаходити колесо для такого простого випадку неглибокого злиття.
Метод Object.assign () використовується для копіювання значень усіх перелічених власних властивостей з одного або кількох вихідних об'єктів у цільовий об'єкт. Він поверне цільовий об'єкт.
var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };
var obj = Object.assign(o1, o2, o3);
console.log(obj);
console.log(o1);
Навіть люди з Node.js говорять так :
_extendніколи не був призначений для використання поза внутрішніми модулями NodeJS. Спільнота все одно знайшла і використовувала його. Він застарілий і не повинен використовуватися в новому коді. JavaScript поставляється з дуже подібною вбудованою функціональністю через Object.assign.
Оновлення:
З версії 8.6 можна оперативно використовувати оператор поширення в Node.js. Приклад нижче:
let o1 = { a: 1 };
let o2 = { b: 2 };
let obj = { ...o1, ...o2 };
Object.assign все ще працює, хоча.
PS1 : Якщо ви насправді зацікавлені в глибокому об’єднанні (при якому дані внутрішнього об’єкта - в будь-якій глибині - рекурсивно об’єднуються), ви можете використовувати такі пакети, як deepmerge , assign-deep або lodash.merge , які досить малі та прості для використання.
PS2 : Майте на увазі , що Object.assign не працює з 0.X версії Node.js . Якщо ви працюєте з однією з цих версій (до цього часу вам цього не слід було робити ), ви можете скористатися, require("util")._extendяк показано в посиланні Node.js вище - для отримання детальної інформації перевірте відповідь tobymackenzie на це саме питання .