gpt4 book ai didi

javascript - window.alert 无法删除

转载 作者:行者123 更新时间:2023-11-28 02:25:43 25 4
gpt4 key购买 nike

我正在阅读有关 JavaScript 删除运算符的内容并对其进行实验。一切看起来都很好,直到我尝试从窗口对象中删除一个方法。代码如下所示

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)

它似乎允许我删除我创建的对象,但不能删除已定义的对象,但它允许我覆盖它。谁能向我解释一下其背后的原因是什么?如果删除对象失败(这里也没有发生),delete 应该返回“false”。

[更新]我正在使用 FF 19 并在 http://jsbin.com 中运行它

[更新] 请注意,我了解如何覆盖 window.alert 并运行我的自定义代码。我的问题是 window.alert 有何特别之处,以至于无法删除但删除返回 true?我知道它是一个 native 对象,但这并不能解释为什么这是不可能的。是不是浏览器JavaScript引擎在我的代码删除alert方法后重新添加了alert方法?我是否可以编写类似的函数,而使用我的库的其他用户无法删除而只能覆盖?怎么办?

最佳答案

很简单,我们可以覆盖现有函数但不能删除它们。当对其调用删除时,现有/标准函数将重置为标准原型(prototype)。但是,如果您确实想中和 windows.alert 函数,请指定一个空白函数,如下所示:

window.alert = function(){}; //blank function makes window.alert now useless 

尝试基于控制台(浏览器)的脚本:

window.alert = function(data){
console.log('alerting:'+data)
};
window.alert('hi'); // this will print "alerting:hi" in console
delete window.alert
window.alert('hi'); // now this will show regular alert message box with "hi" in it

我希望这能解释它。

更新:

假设您想覆盖标准函数“警报”:

//this function will append the data recieved to a HTML element with 
// ID message-div instead of showing browser alert popup
window.alert = function(data){
document.getElementById('message-div').innerHTML = data;
}
alert('Saved Successfully'); //usage as usual
...
//when you no longer need custom alert then you revert to standard with statement below
delete window.alert;

关于javascript - window.alert 无法删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14997961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com