Object.assign()
je užitečná metoda pro kopírování vlastností ze zdrojových objektů do cílového objektu.
Funkce je užitečná pro klonování objektů nebo pro přípravu objektu s požadovanými vlastnostmi pro další použití v kódu.
Pro příklad použijme následující objekty.
const defaults = { name: 'John', age: 30 };
const options = { address: { city: 'New York', country: 'USA' } };
Objekt v prvním argumentu je cílový objekt, který je modifikován a vrácen jako návratová hodnota funkce. Další argumenty jsou zdrojové objekty, ze kterých kopírujeme vlastnosti.
const settings = Object.assign({}, defaults, options);
V případě duplicitních klíčů ve zdrojových objektech je použita hodnota později vloženého objektu.
Díky spread operátoru je pro vývojáře slučování objektů také hračkou.
const C = {...defaults, ...options}
Co z předhozícho příkladu není úplně vidět, ale je důležité zmínit, že Object.assign()
ani spread operátor nedělá hlubokou kopii.
Nevhodné použití
V tomto případě si přepíšeme původní object, který jsme dost možná neměli v úmyslu změnit.
Object.assign(defaults, options);
Dostaneme sice požadovaného výsledku, nicméně dostaneme zbytečný side-effectu
let settings = {}
Object.assign(settings, defaults, options);