Я читаю es5 в наші дні і знаходжу, що атрибут [[configableble]] у деяких вбудованих властивостях глобального об'єкта встановлено на true, що означає, що ми можемо видалити ці властивості.
Наприклад:
метод приєднання об'єкта Array.prototype має атрибути
{[[Writable]]:true, [[Enumerable]]: false, [[Configurable]]: true}
Таким чином, ми можемо легко видалити метод з'єднання для масиву, наприклад:
delete Array.prototype.join;
alert([1,2,3].join);
Повідомлення відображатиметься undefinedв моїй хромовій 17, Firefox 9, тобто 10, навіть 6;
У Chrome 15 & safari 5.1.1 атрибут [[налаштовується]] встановлено на істинне, а результат видалення також є істинним, але остаточний результат все-таки є function(){[native code]}. Схоже, це помилка, і хром її виправляє.
Я цього раніше не помічав. На мою думку, видалити вбудовані функції в коді користувача небезпечно і виведе так багато помилок при роботі з іншими. Отже, чому ECMAScript приймає таке рішення?