В эти дни я читаю 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 принимает это решение?