Итак, есть некий узловой элемент некоего дерева, звать его Node
Узел знает своего владельца - parent, соседей в списке деток папки - nextSibling, previousSibling а также начало и конец списка собственных деток - firstChild и lastChild. По умолчанию они все undefined и отсюда вытекает первый вопрос, а надо ли их объявлять в конструкторе как undefined или нет если они и так undefined. Скажется ли на производительности и памяти обращение к не созданным переменным во время выполнения кода? А может лучше использовать null вместо undefined?
/**
Узловой элемент дерева объектов сцены
*/
module.exports = class Node {
/**
@param {Renderer} renderer - рендерер
@param {string} name - имя
*/
constructor(param = {}) {
this.renderer = param.renderer
this.name = param.name
}
/**
Добавить узел детку
@param {Node} - узел детка
*/
attachChild(child) {
if (child.parent) {
child.parent.detachChild(child)
}
child.parent = this
if (this.lastChild) {
child.previousSibling = this.lastChild
this.lastChild.nextSibling = child
} else {
this.firstChild = child
}
this.lastChild = child
}
/**
Удалить узел дектку из списка деток
@param {Node} - узел детка
*/
detachChild(child) {
if (child.parent === this) {
child.parent = undefined
if (child.nextSibling) {
child.nextSibling.previousSibling = child.previousSibling
} else {
this.lastChild = child.previousSibling
if (this.lastChild) {
this.lastChild.nextSibling = undefined
} else {
this.firstChild = undefined
child.previousSibling = undefined
return;
}
}
if (child.previousSibling) {
child.previousSibling.nextSibling = child.nextSibling
child.previousSibling = undefined
} else {
this.firstChild = child.nextSibling
this.firstChild.previousSibling = undefined
}
child.nextSibling = undefined
}
}
/**
Удалить все узлы детки
*/
detachAllChilds() {
while (this.firstChild) {
var child = this.firstChild
this.firstChild = child.nextSibling
child.parent = undefined
child.nextSibling = undefined
child.previousSibling = undefined
}
this.lastChild = undefined
}
}