Der Operator delete
entfernt eine Eigenschaft von einem Objekt. Wenn ich eine Eigenschaft auf window
gesetzt, ich es löschen:Warum können Sie eine überschriebene Eigenschaft des Fensters löschen?
window.myProp = 10;
delete window.myProp;
Wie the article ich so oft andere beziehen sich auf, wenn es um das Verhalten der delete
Operator Staaten, ist dies, weil Eigenschaftszuweisung nicht die DontDelete
nicht gesetzt Attribut (im Gegensatz zur Variablendeklaration, die dies tut).
Dieser Artikel gibt auch an den folgenden (Hervorhebung hinzugefügt):
beachten, dass es während der Erstellung Eigenschaft ist, die Attribute bestimmt werden (das heißt keine sind gesetzt). Spätere Zuordnungen ändern nicht Attribute der vorhandenen Eigenschaft. Es ist wichtig zu verstehen, dass diese Unterscheidung .
Unter Berücksichtigung dieser Tatsache, warum kann ich eine vorhandene Eigenschaft Fenster außer Kraft setzen, alert
, und es dann auf den ursprünglichen Wert-Rückkehr löschen? Fehle ich etwas Offensichtliches? Ich benutze selten den delete
Operator, so dass dies durchaus der Fall sein kann.
Zum Beispiel:
window.alert = function() {};
alert("Hi!"); //Nothing happens
delete window.alert;
alert("Hello?"); //Alerts 'Hello?'
hier ein fiddle zu, dass zeigt (nur in Chome getestet, ziemlich sicher, dass IE wird auf diese Weise nicht so verhalten, aber den Zugang zu irgendetwas nicht sofort, aber Chrome).
'delete' auf Host-Objekte ist nicht verlässlich und funktioniert nicht in IE. – Esailija
möglich duplikate von [alert() funktioniert nicht in Chrome] (http://stackoverflow.com/questions/6184169/alert-not-working-in-chrome) –
Ich weiß es nicht, aber ich mag Ihre Frage. Ich nehme an, es ist etwas wie ein CSS-Stil in einem Element, der den geerbten Stil außer Kraft setzt, und wenn dieser Elementstil über JS gelöscht wird, kehrt es zum geerbten Stil zurück ... Sie können es nur überschreiben, es wird nie gelöscht - nur Theorie. Was passiert auch, wenn Sie window.alert löschen möchten, ohne es zuvor als etwas anderes definiert zu haben? – squarephoenix