Задать вопрос
MrGobus
@MrGobus
Иван

Что выбрать null или undefined?

Итак, есть некий узловой элемент некоего дерева, звать его 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
    }

}
  • Вопрос задан
  • 364 просмотра
Подписаться 1 Оценить 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽