В эти дни я читаю es5 и нахожу, что атрибут [[configurable]] в некоторых встроенных свойствах глобального объекта имеет значение true, что означает, что мы можем удалить эти свойства.
Например:
метод соединения объекта Array.prototype имеет атрибуты
{[[Writable]]:true, [[Enumerable]]: false, [[Configurable]]: true}
Таким образом, мы можем легко удалить метод соединения для Array, например:
delete Array.prototype.join;
alert([1,2,3].join);
Предупреждение будет отображаться undefined
в моем chromium 17, firefox 9, то есть 10, даже ie6;
В Chrome 15 и Safari 5.1.1 атрибут [[configurable]] имеет значение true, и результат удаления также равен true, но окончательный результат остается function(){[native code]}
. Похоже, это ошибка, и хром исправит ее.
Я не заметил этого раньше. На мой взгляд, удаление встроенных функций в коде пользователя опасно и может вызвать столько ошибок при работе с другими. Так почему ECMAScript принимает это решение?
источник
Ответы:
Я склонен был бы согласиться с вами, но с другой стороны, я просто нашел ситуацию, в которой мне было необходимо
delete JSON.stringify
при определенных обстоятельствах из-за ошибки в Firefox 3.5 . Я, конечно, был рад возможности встроить туда обезьян-патч.источник
JSON.stringify
и внедряет его при необходимости. Извините, я не объяснил это в своем ответе.Настраиваемый не об удалении.
Речь идет о возможности заменить значение только для чтения.
Это очень мощный инструмент, и ненастраиваемые значения расстраивают, если вы не можете их удалить.
У меня было довольно много случаев, когда мне нужно было исправить непонятную ошибку или добавить немного другую функциональность (перехват, ведение журнала). Для этого необходимо заменить значение.
Пример:
Идея заключается в том, что если вы можете удалить свойства, у вас будет больше метапрограммирующего контроля Если вы не можете удалить их, вы будете просто раздражены на языке.
Нет веских причин делать свойства не удаляемыми, кроме как раздражать людей.
источник
Наоборот. Разрешить настройку хорошо, потому что она позволяет авторам веб-сайтов иметь большую гибкость.
Если автору веб-сайта необходимо загрузить сторонний код в той же виртуальной машине JS и для этого использовать встроенный JS-анализатор, он всегда может защитить свойства, установив их в неконфигурируемые перед загрузкой стороннего кода.
источник