У меня есть два класса, Quest
и Task
, которые оба расширяют Event
. Когда создается экземпляр Quest
, он вызывает родительский класс Event
для создания экземпляра множества Tasks
в экземпляре Quest
. Эти Tasks
будут принадлежать экземпляру Quest
.
Эта скрипка более кратко показывает, что я имею в виду. Это бесконечная круговая ссылка task.parent.task.parent.task.parent...
, которая для сложных объектов, я беспокоюсь о влиянии производительности.
Дети Tasks
должны сообщить своим родителям Quest
, когда происходят определенные события. Итак, при создании экземпляра Quest
и, таким образом, создании экземпляра Tasks
, я передаю this
, чтобы ребенок знал, кому он принадлежит:
new childEventClass(eventObj, this));
Очевидная проблема здесь заключается в том, что теперь у вас есть бесконечный цикл установки дочерних элементов для родительского элемента и родительского элемента для дочернего элемента, который теперь снова включает дочерние элементы и т. Д. Console.log родительского элемента Task
, вы получить:
Quest {
id: 1,
children: [
Task: {
id: 1,
parent: Quest {
id: 1,
children: [
Task: {
id: 1,
etc...
},
...
]
},
...
},
...
]
}
Как этого избежать?
Другой файл:
this.quest = new Quest(quest);
Классы:
class Event {
constructor(args, childEventClass, childEventClassName) {
if (childEventClass && childEventClassName && args[childEventClassName] && args[childEventClassName].length > 0) {
this.children = args[childEventClassName].map(eventObj => new childEventClass(eventObj, this));
}
}
...
}
class Quest extends Event {
constructor(args) {
super(args, Task, 'tasks');
}
};
class Task extends Event {
constructor(args, parent) {
super(args, Activity, 'activities');
this.parent = parent;
}
};
class Activity extends Event {
constructor(args, parent) {
...
}
};