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

  • Автор темы neos1
  • 40
  • Обновлено
  • 13, May 2024
  • #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 и т. д. и т. п.?

neos1


Рег
18 Mar, 2015

Тем
1

Постов
3

Баллов
13
  • 07, Jun 2024
  • #2
Я просто предполагаю, но если бы я хотел иметь легкий доступ к моим пользовательским объектам во время написания кода с автоматическим предложением, все, что начинается с подчеркивания, вызывало бы список моих пользовательских объектов вверху (при условии, что мы предполагаем, что он упорядочен в алфавитном порядке). , что ускоряет время разработки.



Обычно это единственная причина, по которой я бы поместил символы подчеркивания в имена объектов.

Иногда я использую соглашение, но с двумя подчеркиваниями? Это все равно, что носить карманный протектор вместо карманного протектора.

Не то чтобы в этом было что-то плохое.
 

Марина Хоменко


Рег
12 Apr, 2011

Тем
0

Постов
3

Баллов
3
  • 07, Jun 2024
  • #3
Что теперь? О, автопредложение, еще одна глупая бессмысленная чушь, которая мне просто мешает, потому что отвлекает.

то есть тот тип дерьма, из-за которого я не использую IDE или любой другой редактор, в котором я не могу отключить эту BS. Как неразборчивый идиотский кислотный трип с цветовой подсветкой синтаксиса или до боли бесполезный автозаполнение и завершение тегов.
 

Юджин1


Рег
30 Oct, 2014

Тем
1

Постов
3

Баллов
13
  • 08, Jun 2024
  • #4
Собственно, это основная причина.

И случай, когда сторонний плагин может расширить то же свойство и перезаписать то, что вы сделали.

Кроме того, сообщалось о некоторых случаях, когда Chromium это не нравилось, но я думаю, что в настоящее время это довольно редко (на данный момент не могу найти код отслеживания ошибок).

В общем, не стесняйтесь распространять радость своему сердцу.

(забавное примечание: раньше Facebook использовал этот метод для отключения console.log , https://stackoverflow.com/questions/21692646/how-does-facebook-disable-the-browsers-integrated-developer-tools

)
 

Jur1


Рег
08 Mar, 2013

Тем
1

Постов
2

Баллов
12
Тем
49554
Комментарии
57426
Опыт
552966

Интересно