Я хочу расширить ванильные DOM-объекты новыми методами, например, расширением document.createElement()
путем определения нового метода createElementWithAttrs()
или расширением Element
, но какой из следующих двух методов является наилучшим?
Подход A
(например, как Chrome DevTools делает это , но это может произойти из-за того, что код был унаследован от WebKit задолго до ES2015)
Добавьте новый метод к существующим прототипам классов DOM.
// dom.js
Document.prototype.createElementWithClass = (tagName, className) => { ... };
Element.prototype.findEnclosingShadowRoot = () => { ... };
// probably a few more
// someScriptName.js
const e1 = document.createElementWithClass(...);
...
const shadow = e2.findEnclosingShadowRoot();
Плюсы:
- Краткие и интуитивно понятные, поскольку их можно использовать так, как если бы они были частью собственного DOM * 1020. *
Минусы:
- Нужно вставить
dom.js
в HTML с тегом <script>
- Иногда сбивает с толку читателей (включая меня, потому что после долгогопериод времени, который я мог бы забыть).
Подход B :
Определить их в модуле ES.
// dom.js
export const createElementWithClass = (tagName, className) => { ... };
export const findEnclosingShadowRoot = (element) => { ... };
// probably a few more
// someScriptName.js
import * as dom from './dom.js';
const e1 = dom.createElementWithClass(...);
...
const shadow = dom.findEnclosingShadowRoot(e2);
Плюсы иМинусы являются противоположностью "Минусы" и "Плюсы" выше.
Есть ли лучшая практика? Я пропускаю некоторые плюсы / минусы, чтобы рассмотреть? Спасибо.