javascript – 為什麼可以刪除視窗的覆蓋屬性?
delete操作符從物件中刪除屬性.如果我在視窗上設定了一個屬性,我可以刪除它:
window.myProp = 10; delete window.myProp;
作為ofollow,noindex" target="_blank">the article 我經常引用其他的,當涉及到刪除操作符狀態的行為,這是因為屬性分配不設定DontDelete屬性(而不是變數宣告,這是).
該文章還說明了以下內容(重點是):
Note that it is during property creation that attributes are
Later assignments don’t modify
. It’s important to understand thisdistinction.
考慮到這一點,為什麼我可以覆蓋視窗的現有屬性,提醒,然後將其刪除以返回原始值?我錯過了什麼嗎?我很少使用刪除操作符,這樣就可以了.
例如:
window.alert = function() {}; alert("Hi!"); //Nothing happens delete window.alert; alert("Hello?"); //Alerts 'Hello?'
在Chrome中,window.alert函式是DOMWindow類的原型的一部分,它不是視窗本身的屬性.
因此,當您覆蓋window.alert時,您要向視窗新增一個新屬性,但原型中的版本繼續存在,但隱藏.
當您刪除window.alert時,原型中的函式將被重新顯示.
這裡有一些控制檯輸出顯示該功能在原型中:
> window.constructor.prototype DOMWindow > window.constructor.prototype.alert function alert() { [native code] }
Firefox的行為類似,儘管類名不同.
http://stackoverflow.com/questions/10319602/why-can-you-delete-an-overridden-property-of-window