W EcmaScript6 dodano bardzo wiele funkcji mających usprawnić najczęściej wykonywane czynności. Jedną z nich jest Object.assign()
. Metoda ta znacznie ułatwia pracę z obiektami, czyniąc ich klonowanie, łączenie i nadpisywanie prostszym niż kiedykolwiek.
Łączenie obiektów
const object1 = { a: 1 };
const object2 = { b: 2 };
const object3 = { c: 3 };
const objectMerge = Object.assign({}, object1, object2, object3);
console.log(objectMerge) //{ a: 1, b: 2, c:3 }
Jako pierwszy parametr przekazujemy pusty obiekt, który stanie się bazą do "rozbudowy". Gdybyśmy go pominęli, jako że object1 został zadeklarowany przy użyciu słowa kluczowego const
, zostanie wyrzucony błąd:
const object1 = { a: 1 };
const object2 = { b: 2 };
const object3 = { c: 3 };
const objectMerge = Object.assign(object1, object2, object3);
//SyntaxError: Identifier 'object1' has already been declared}
Gdybyśmy jednak potrzebowali nadpisać object1
, wystarczy zamiana const
na let
:
let object1 = { a: 1 };
const object2 = { b: 2 };
const object3 = { c: 3 };
Object.assign(object1, object2, object3);
console.log(object1) //{ a: 1, b: 2, c:3 }
Klonowanie obiektów
Jak można się łątwo domyślić kopiowanie obiektów za pomocą Object.assign
będzie wyglądało tak:
const myObject = { preciousValue: 42 };
const clonedObject = Object.assign({}, myObject);
console.log(clonedObject) //{ preciousValue: 42 }
Nadpisywanie danych obiektu
Najciekawszą możliwością, którą daje nam Object.assign
wydaje się być nadpisywanie danych obiektu. Przypisywanie kolejnych właściwości do obiektu w funkcji Object.assign
odbywa się od lewej do prawej. Jeśli więc kolejny obiekt przekazany do funkcji posiada właściwość, która istnieje w którymś z poprzedników, zostanie ona nadpisana:
const objectA = { a: 1, b: 1, c: 1};
const objectC = { c: 3 };
const objectMerge = Object.assign({}, objectA, { b: 2, c: 2 }, objectC);
console.log(objectMerge); //{ a: 1, b: 2, c:3 }