El operador delete
elimina una propiedad de un objeto. Si fijo una propiedad en window
, puedo borrarlo:¿Por qué puede eliminar una propiedad anulada de la ventana?
window.myProp = 10;
delete window.myProp;
Como the article que tan a menudo referir a otros a lo que se refiere al comportamiento de los delete
estados del operador, esto se debe a asignación de propiedad no establece el DontDelete
atributo (a diferencia de la declaración de variables, que sí lo hace).
Ese artículo también afirma lo siguiente (énfasis añadido):
en cuenta que es durante la creación de la propiedad que se atribuye determinada (es decir, ninguno de ellos está configurado). Las asignaciones posteriores no modifican los atributos de la propiedad existente. Es importante entender esta distinción .
Teniendo esto en mente, ¿por qué puedo anular una propiedad existente de la ventana, alert
, y luego eliminarlo para retorno al valor original? ¿Me estoy perdiendo algo obvio? Raramente utilizo el operador delete
, así que ese puede ser el caso.
Por ejemplo:
window.alert = function() {};
alert("Hi!"); //Nothing happens
delete window.alert;
alert("Hello?"); //Alerts 'Hello?'
Aquí hay una fiddle para demostrar que (sólo probado en Chome, bastante seguro de IE no comportarse de esta manera, pero no tienen acceso a nada, pero Chrome en este momento).
'delete' en objetos host no se puede confiar y no funciona en IE. – Esailija
posible duplicado de [alerta() no funciona en Chrome] (http://stackoverflow.com/questions/6184169/alert-not-working-in-chrome) –
No lo sé pero me gusta su pregunta. Supongo que es algo así como un estilo CSS en un elemento que anula su estilo heredado, y si ese estilo de elemento se elimina a través de JS, vuelve al estilo heredado ... solo puede anularlo, nunca se elimina, solo teoría. Además, ¿qué pasaría si intentas eliminar window.alert sin haberlo definido primero como algo diferente? – squarephoenix