document.addEventListener和window.addEventListener之间的区别?

当使用PhoneGap时,它有一些使用document.addEventListener默认JavaScript代码,但是我有自己的代码,使用window.addEventListener

 function onBodyLoad(){ document.addEventListener("deviceready", onDeviceReady, false); document.addEventListener("touchmove", preventBehavior, false); window.addEventListener('shake', shakeEventDidOccur, false); } 

有什么区别,哪个更好用?

documentwindow是不同的对象,它们有一些不同的事件。 在它们上使用addEventListener()来监听指定给不同对象的事件。 你应该使用真正有兴趣的事件。

例如, window对象上不存在document对象上的"resize"事件。

例如, "DOMContentLoaded"事件只在document对象上。

所以基本上,您需要知道哪个对象接收到您感兴趣的事件,并在该特定对象上使用.addEventListener()

下面是一个有趣的图表,显示哪种types的对象创build哪种types的事件: https : //developer.mozilla.org/en-US/docs/DOM/DOM_event_reference


如果您正在侦听传播的事件(如单击事件),则可以在文档对象或窗口对象上侦听该事件。 传播事件唯一的主要区别在于时机。 事件将在window对象之前碰到document对象,因为它首先出现在层次结构中,但是这种差异通常是不重要的,所以您可以select其中之一。 我发现在处理传播事件时,select最符合事件源的事件通常会更好。 这意味着你可以在windowselectdocument 。 但是,我经常更接近源document.body ,甚至在文档中使用document.body或者更接近的通用父项(如果可能的话)。

你会发现,在JavaScript中,通常有许多不同的方法来做同样的事情或find相同的信息。 在你的例子中,你正在寻找一些保证永远存在的元素。 windowdocument都符合法案(只有一些差异)。

从mozilla开发networking :

addEventListener()在单个目标上注册单个事件侦听器。 事件目标可以是文档中的单个元素,文档本身,窗口或XMLHttpRequest。

所以只要你能指望你的“目标”总是在那里,唯一的区别就是你正在听的是什么事件,所以就用你最喜欢的。