我正在阅读关于JavaScript删除操作符和试验。一切似乎都很好,直到我试图从窗口对象中删除一个方法。代码看起来像下面window.alert无法删除
var log = function(str){
if(str !== undefined)
{
document.write(str);
}
document.write("</br>");
};
window.myVar = function(){
// do something
};
// this deletes custom method
log(delete window.myVar); // true (expected)
log(typeof window.myVar); // undefined (expected)
log(delete window.alert); // true (OK)
log(typeof window.alert); // function (Unexpected)
window.alert = 10;
log(typeof window.alert); // number (Successfully overwritten)
log(delete window.alert); // true
log(typeof window.alert); // function (Returns back to original object)
看来,它让我删除我创建的对象,但尚未定义的对象,但它让我重写它。有人可以解释我背后的原因是什么?如果删除的对象在这里也没有发生,也应该返回'false'。
[更新]我用的FF 19和运行它http://jsbin.com
[更新]请注意,我知道如何重写window.alert和运行我的自定义代码。我的问题是关于window.alert是如此特别,以至于它不能被删除,但删除返回true?我知道这是一个本地对象,但这并不能解释为什么这是不可能的。浏览器JavaScript引擎在被我的代码删除后是否重新添加了警报方法?也有可能我写类似的功能,使其他用户使用我的图书馆不能删除,但只能覆盖?怎么样?
原生功能不能被删除。你想做什么? – sdespont 2013-02-21 08:51:22
我明白这不应该在实际的代码中完成,但我在这里试图从技术上确切地知道发生了什么,以及它是否使用了一些JavaScript功能,那些功能是什么,以及如果可以在自定义代码/库中使用这些功能 – Tanmoy 2013-02-21 09:19:10