Расширение системных объектов – хорошо или плохо?

neos1

Пользователь
Регистрация
18.03.15
Сообщения
1
Реакции
0
Баллы
1
Я задаю этот вопрос на нескольких форумах, так как хочу привлечь к этому как можно больше внимания.

Я помню, как около десяти лет назад люди говорили мне, что делают что-то вроде:





var escaped = htmlSpecialChars(myString);




Код (разметка): или

function htmlSpecialChars(str) {
Код (разметка): Было плохо. Я могу вспомнить только две причины:

1) Возможность конфликта пространства имен с будущими фактическими методами объекта ECMAScript.

2) Не наследуется должным образом в IE7/ранее на Node или потомках Node, таких как Element.

Поскольку меня больше не волнует IE9/более ранние версии (переход к сценарному отключению поведения, поскольку на самом деле у меня плавная деградация) и избегаю официальных проблем с пространством имен, добавляя в качестве префикса двойное подчеркивание... но я мог бы поклясться, что было больше причин не делать этого .

Я просто не могу вспомнить, что это были за причины, и мой Google-фу меня с треском подводит.

Такое ощущение, что я могу сказать:
Расширение системных объектов – хорошо или плохо?
var escaped = myString.__htmlSpecialChars;
Код (разметка): более удобен/разумен, чем ДЕЙСТВИТЕЛЬНО загрязнять глобальное пространство имен:

Object.addProperty(String.prototype, '__htmlSpecialChars', {
Код (разметка): и...

String.prototype.__condense = function() {
Код (разметка): поскольку он удаляет из него проход значения, поскольку «это» жестко закодировано в обработчике, удаляя дополнительные манипуляции со стеком.

Итак... может ли кто-нибудь перечислить другие проблемы с расширением/морфификацией системных объектов браузера, таких как String, Document, Node, Element и т. д. и т. п.?
 
Сверху Снизу