Я много обсуждал вопрос о расширении Element. Насколько я могу судить, это основные вопросы:JavaScript: расширенный элементный прототип
- Это может конфликтовать с другими библиотеками
- Он добавляет недокументированные функции в DOM подпрограммы
- Он не работает с унаследованным IE
- It могут вступать в конфликт с будущим изменения
Учитывая проект, который не ссылается никакие другие библиотеки, документы изменения, и не дает ни черта исторических браузеров:
Есть ли технические причина не продлевать прототип элемента. Вот пример того, как это полезно:
Element.prototype.toggleAttribute=function(attribute,value) {
if(value===undefined) value=true;
if(this.hasAttribute(attribute)) this.removeAttribute(attribute);
else this.addAttribute(attribute,value);
};
Я видел слишком много комментариев о зле расширения прототипов, не предлагая разумное объяснение.
Примечание 1: приведенный выше пример, возможно, слишком очевиден, так как toggleAttribute
- это способ, который может быть добавлен в будущем. Для обсуждения предположите, что это называется manngoToggleAttribute
.
Примечание 2: Я удалил тест на то, существует ли метод уже существует. Даже если такой метод уже существует, более предсказуемо его переопределить. В любом случае, Я предполагаю, что дело здесь в том, что метод еще не определен, не говоря уже о реализации. Вот в чем дело.
Thanks
У вас также может возникнуть проблема с прямой совместимостью - функция, которую вы добавляете, может стать частью стандарта в будущем. – Timo
Что именно вы подразумеваете под «технической причиной»? Нет, расширение «Элемента» (как вы выяснили) отлично работает в контролируемых средах. – Bergi
@TimoSta Я изменил образец кода, чтобы включить тест. – Manngo