Оператор delete
удаляет свойство объекта. Если установить свойство на window
, я могу удалить его:Почему вы можете удалить переопределенное свойство окна?
window.myProp = 10;
delete window.myProp;
Как the article я так часто ссылаются другие, когда речь идет о поведении delete
оператора состояний, это потому, что присвоение собственности не устанавливает DontDelete
атрибут (в отличие от объявления переменной, который делает).
В этой статье также говорится следующее (курсив добавлен):
Обратите внимание, что при создании имущества, что атрибуты являются определены (то есть ни один не установлены). Более поздние присвоения не изменяют атрибуты существующего имущества. Важно понимать это различие .
Имея это в виду, почему я могу переопределить существующее свойство окна, alert
, а затем удалить его вернуться к исходному значению? Мне что-то не хватает? Я редко использую оператор delete
, так что это может быть так.
Например:
window.alert = function() {};
alert("Hi!"); //Nothing happens
delete window.alert;
alert("Hello?"); //Alerts 'Hello?'
Вот fiddle, чтобы продемонстрировать, что (проверяется только в темэ, уверен, что IE не будет вести себя подобным образом, но не имеют доступа ни к чему, кроме Chrome прямо сейчас).
'delete' на объектах хоста не следует полагаться и не работает в IE. – Esailija
Возможный дубликат [alert() не работает в Chrome] (http://stackoverflow.com/questions/6184169/alert-not-working-in-chrome) –
Я не знаю, но мне нравится ваш вопрос. Я предполагаю, что это что-то вроде стиля CSS для элемента, переопределяющего его унаследованный стиль, и если этот стили стилей удаляются через JS, он возвращается к унаследованному стилю ... вы можете только переопределить его, он никогда не удаляется - просто теория. Кроме того, что произойдет, если вы попытаетесь удалить window.alert, не указав сначала что-то еще? – squarephoenix