Почему для removeChild нужен родительский узел?

После ответа на на этот вопрос мне остается только удивляться, почему removeChild нуждается в родительском элементе. В конце концов, мы могли бы просто сделать

node.parentNode.removeChild(node);

, поскольку родительский узел всегда должен быть напрямую доступен для механизма Javascript / DOM, нет необходимости указывать родительский узел узла, который должен быть удален.

Конечно Я понимаю принцип, согласно которому removeChild является методом узла DOM, но почему-то не похоже на документ . removeNode существует (который просто принимает произвольный узел в качестве параметра)?

РЕДАКТИРОВАТЬ: Чтобы быть более ясным, вопрос: зачем движку JS вообще нужен родительский узел, если он уже (уникальный) узел, который нужно удалить?

13
задан Community 23 May 2017 в 12:25
поделиться

1 ответ

Думаю, это упрощает дизайн. Узел может существовать изолированно, но более интересным случаем является дерево DOM. С removeChild удаляемый узел должен быть дочерним по отношению к узлу, на котором был вызван метод.

Получение списка всех детей и ручное сравнение каждого из них - не такая дорогая операция.Однако поиск по всем потомкам узла, который нужно удалить, действительно стоит дорого.

Изменить : в ответ на ваше обновление браузер просто реализует спецификацию DOM , которая определяет метод removeChild на узле . Спецификация на мой взгляд должна быть недвусмысленной и свободной от предположений. С этой точки зрения он похож на Внедрение зависимостей . Спецификация DOM Core моделирует дерево с использованием строительных блоков, таких как Node, Element и т. Д. Добавление отдельного метода, такого как removeNode где-то в этих строительных блоках, означает, что метод неявно знает свою среду - что он ] может быть дочерним элементом некоторого узла, и его следует удалить оттуда, если это так.

Задача w3 - создать очень надежный API, который делает возможным большинство вещей. Им не следует беспокоиться о синтаксическом сахаре, поскольку его всегда можно написать на основе собственных API-интерфейсов, если они хорошо написаны.

7
ответ дан 2 December 2019 в 01:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: