Оператор 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 ).