javascript - 如何在 JavaScript 中正确使用 alert 和 apply?

标签 javascript browser reflection

我想知道浏览器中的JavaScript警报功能是否
是否需要文档作为此参数。那么什么是
通过应用正确调用?

/* Variant 1 */
alert.apply(null, ["Hello World!"])

/* Variant 2 */
alert.apply(window, ["Hello World!"])
对上述问题的回答也可能会讨论绑定(bind)
并打电话,但如果有人可以,我已经很高兴了
启发应用案例。
25.06.2021 编辑:
似乎警报不是“正常的”,我进入了一些 fiddle :
/* Variant 3 */
alert.apply(document, ["Hello World!"]);
-->
Error: 'alert' called on an object that does not implement interface Window.

最佳答案

您可以使用以下任何一种:

alert.apply(window,    ["Hello word"]);
alert.apply(null,      ["Hello world"]);
alert.apply(undefined, ["Hello world"]);
您可以使用其中任何一个的原因是 alert (有效地)以松散模式定义,¹这意味着它不能有 nullundefinedthis ;所以如果你称它为传递 nullundefinedthis , 默认 this (window 在浏览器上,粗略)被使用。
您不能使用 document因为per specification alert使用 this (查看它是否可以显示窗口的对话框)。所以它需要this成为窗口,而不是文件。

¹ 松散模式(不关心并行构造的人也称为草率模式😉)与严格模式相反。除非您使用模块,否则代码处于松散模式,class , 或 "use strict"; .

关于javascript - 如何在 JavaScript 中正确使用 alert 和 apply?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68130976/

相关文章:

javascript - 用 jquery 改变 img src

javascript - 为什么 new Date(null, null, null) 在浏览器中返回有效日期?

Golang 获取struct字段的字符串名称

c# - 使用 ConstructorInfo 调用构造函数的反射

javascript - 有没有更好的方法通过类名引用 html 元素?

javascript - 如何使用 JavaScript 检查对象中是否存在值

html - 平铺一百个 1px 的方 block VS 平铺四个 25px 的方 block

.net - 如何防止浏览器显示页面的缓存版本?

c# - 如何在.net core中使用反射按名称查找类的命名空间?

javascript - 带路由的 Angular 安全身份验证