Почему вы можете удалить переопределенное свойство окна?

Оператор deleteудаляет свойство из объекта. Если я устанавливаю свойство в window, я могу удалить его:

window.myProp = 10;
delete window.myProp;

Поскольку статья я так часто ссылаюсь на других, когда речь идет о поведении состояний оператора delete, это потому, что свойство назначение не устанавливает атрибут DontDelete(в отличие от объявления переменной, которое устанавливает ).

В этой статье также указано следующее (добавлено выделение):

Обратите внимание, что именно во время создания свойства атрибуты определено (т. е. ничего не установлено ). Более поздние назначения не изменяются атрибуты существующей собственности . Важно это понимать различие.

Имея это в виду, почему я могу переопределить существующее свойство окна alert, а затем удалить его, чтобы вернуться к исходному значению ? Я упускаю что-то очевидное? Я редко использую оператор delete, так что вполне может быть так.

Например,:

window.alert = function() {};
alert("Hi!"); //Nothing happens

delete window.alert;
alert("Hello?"); //Alerts 'Hello?'

Вот скрипт , чтобы продемонстрировать, что (тестировалось только в Chome, почти уверен, что IE не будет вести себя таким образом, но сейчас у него нет доступа ни к чему, кроме Chrome ).

15
задан James Allardice 25 April 2012 в 16:13
поделиться