Экспериментируя с идеей.Учитывая объект как:
T = {
a: 2,
b: 9,
c: {
a: 3,
d: 6,
e: {
f: 12
}
}
}
Я хочу изменить его так, чтобы каждое значение, являющееся объектом, изменялось на один и тот же объект с родительским объектом в качестве прототипа.
Значение I 'я хотел бы иметь возможность иметь следующие выходные данные:
> T.c.b
9
> T.c.e.b
9
> T.c.e.a
3
> T.c.c.c
{a: 3, d: 6, e:[Object]}
Я уже создал следующие функции, которые работают почти так, как ожидалось:
function chainer(object) {
for (const key in object) {
if (object[key] !== null && typeof (object[key]) === 'object') {
let Constructor = function () {
};
Constructor.prototype = object;
let objectValue = {...object[key]};
object[key] = new Constructor();
for (const savedKey in objectValue) {
object[key][savedKey] = objectValue[savedKey];
}
}
}
}
function chain(object) {
chainer(object);
for (const key in object) {
if (object[key] !== null && typeof (object[key]) === 'object') {
chainer(object[key]);
}
}
}
В предыдущем примере это работает как ожидалось,Тем не менее, когда я пытаюсь сделать следующее:
T = {a:4, g:{g:{g:{g:{g:{g:{g:{}}}}}}}}
Получается следующий вывод:
> T.a
4
> T.g.a
4
> T.g.g.a
4
> T.g.g.g.a
undefined
> T.g.g.g.g.a
undefined
Мне кажется странным, что это работает только до определенного момента, это заставляет меня думать, что, возможно, егопроблема с некоторым ограничением, которую я не знаю.
В любом случае, у меня кружится голова от идей, каких-либо мыслей?