gpt4 book ai didi

javascript - 试图覆盖警报,它有效,但执行两次

转载 作者:行者123 更新时间:2023-11-29 09:54:19 28 4
gpt4 key购买 nike

所以,请叫我懒惰,但我正在尝试向 Javascript 的警报功能添加一些语法糖。这是代码:

<script src='jquery.js'></script>
<script>
window.nativeAlert = window.alert
window.alert = function()
{
window.nativeAlert(Array.prototype.slice.call(arguments).join(", ")+" window")
return this
}
Array.prototype.alert = function()
{
window.nativeAlert(this.toString()+" array")
return this
}
Object.prototype.alert = function()
{
window.nativeAlert(this.toString()+" object")
return this
}
$(function()
{
var features = $.getJSON("features.json")
features.alert()
})
</script>

这似乎可行,但会触发两次。知道为什么会这样吗?我的直觉说它与重载有关,但它对数组和 [window.]alert() 工作得很好(触发一次)。

附言我知道 JSON 还不能正确显示,那是以后的事。

最佳答案

这是一个棘手的问题,需要在调试器中逐步遍历调用堆栈才能看到发生了什么。

发生的事情是 alert 作为属性添加到每个 对象。这包括从 features.json 文件中反序列化的对象。

一旦 .getJSON 请求完成,jQuery 就会解析从文件返回的 JSON 字符串。当 jQuery 发现对象的一个​​属性是一个函数时,它就会执行它。由于您的 alert 是对象的属性,因此它会调用它。

这很好地说明了为什么向 Object.prototype 添加方法不是一个好主意。任何尝试遍历对象属性的操作也会遇到自定义原型(prototype)属性。

关于javascript - 试图覆盖警报,它有效,但执行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15513949/

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