Сейчас я разрабатываю игровой движок, работающий на холсте. У меня есть некоторые базовые, но теперь я хочу добавить родителей и детей ... Все работает нормально, пока я не попытаюсь добавить ссылку на дочерний объект в родительский объект. Вот очень короткая часть моей проблемы:
// Object that will be parent of obj1
var obj0 = {
childs: [],
someValue: 10,
parent: null
}
// obj1 is defined from obj0 throught Object.assign(), so any change in
// obj1 will NOT reflect to obj0 (I added console.log() to show it)
var obj1 = Object.assign({}, obj0);
console.log("Expected result: false; Result: " + (obj0 == obj1));
obj1.someValue = 5;
console.log("Expected result: false; Result: " + (obj0.someValue == obj1.someValue));
// Now add obj0 as parent to obj1...
obj1.parent = obj0;
// ... and add obj1 as child to obj0 - I need to do this throught .parent
// (I can't directly do some change in obj1)
obj1.parent.childs.push(obj1);
// Everything seems be alright, but... If I look into obj1.childs...
console.log(obj1.childs)
// I see, that .push applied to all objects that are...
Как видите, метод .push()
применяется ко всем объектам (в данном случае к обоим объектам).
Итак, мои вопросы:
1. Почему?
2. Как мне этого избежать?
Заранее спасибо ...