Цель: Реализация вложенного присваивания, алгоритм основывается на алгоритме из спецификации Object.assign ECMAScript.
/// Демонстрация
const a = {
a: 1,
b: 2,
c: 3,
obj: {
aa: 11,
bb: 22,
cc: 33
}
};
const b = {
c: "3c",
obj: {
cc: "33cc",
dd: "44dd",
}
};
deepAssign({}, a, b); /// {a: 1, b: 2, c: "3c", obj: {aa: 11, bb: 22, cc: "33cc", dd: "44dd"}}
Замечание: Данный алгоритм как и Object.assign может не создавать копии объектов.
var a = {a: 1, b: 2, c: 3};
var b = {a: 1, b: 2, c: {value: 3}};
Object.assign(a, b);
a.c === b.c /// true
var a = {a: 1, b: 2, c: 3};
var b = {a: 1, b: 2, c: {value: 3}};
createAssign(true)(a, b);
a.c === b.c /// true
var a = {a: 1, b: 2, c: 3};
var b = {a: 1, b: 2, c: {value: 3}};
createAssign()(a, b);
a.c === b.c /// false