- 13, May 2024
- #1
Я задаю этот вопрос на нескольких форумах, так как хочу привлечь к этому как можно больше внимания.
Я помню, как около десяти лет назад люди говорили мне, что делают что-то вроде:
Я могу вспомнить только две причины:
1) Возможность конфликта пространства имен с будущими фактическими методами объекта ECMAScript.
2) Не наследуется должным образом в IE7/ранее на Node или потомках Node, таких как Element.
Поскольку меня больше не волнует IE9/более ранние версии (переход к сценарному отключению поведения, поскольку на самом деле у меня плавная деградация) и избегаю официальных проблем с пространством имен, добавляя в качестве префикса двойное подчеркивание.
но я мог бы поклясться, что было больше причин не делать этого . Я просто не могу вспомнить, что это были за причины, и мой Google-фу меня с треском подводит. Такое ощущение, что я могу сказать:
может ли кто-нибудь перечислить другие проблемы с расширением/морфификацией системных объектов браузера, таких как String, Document, Node, Element и т. д. и т. п.?
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 и т. д. и т. п.?