Javascript 为什么有些事件处理程序是由dispatchEvent触发的,而另一些则不是?
基于事件的JS有两个基本API:事件侦听器和事件处理程序。 事件侦听器已注册到Javascript 为什么有些事件处理程序是由dispatchEvent触发的,而另一些则不是?,javascript,events,browser,dom-events,Javascript,Events,Browser,Dom Events,基于事件的JS有两个基本API:事件侦听器和事件处理程序。 事件侦听器已注册到addEventListener, 事件处理程序使用API注册,如target.onfoobar=(ev)=>{…}。 然后可以使用dispatchEvent发送事件。 但我不清楚dispatchEvent如何/何时/是否调用事件处理程序 我最初的思维模式是在dispatchEvent的末尾调用事件处理程序。 也就是说,dispatchEvent看起来像这样: EventTarget.prototype.dispatc
addEventListener
,
事件处理程序使用API注册,如target.onfoobar=(ev)=>{…}
。
然后可以使用dispatchEvent
发送事件。
但我不清楚dispatchEvent
如何/何时/是否调用事件处理程序
我最初的思维模式是在dispatchEvent
的末尾调用事件处理程序。
也就是说,dispatchEvent
看起来像这样:
EventTarget.prototype.dispatchEvent=函数(事件){
//首先发送到this.listeners,然后:
const handler=this['on'+event.type];
if(处理程序)处理程序(事件);
};
有时,dispatchEvent
会调用事件处理程序:
window.onclick=()=>console.log(“这叫做!!”);
窗口。dispatchEvent(新事件(“单击”);
但在其他情况下,dispatchEvent
不调用事件处理程序:
window.onxyz=()=>console.log(“这不是调用!!”);
dispatchEvent(新事件(“xyz”));
我不知道如何解释这种差异。
这两种情况有什么区别?
是否click
是一种“标准”事件类型,
但是xyz不是吗?
如果是,什么构成“标准”事件类型,
而
dispatchEvent
如何知道两者之间的区别呢?这是因为onclick
是的一部分(通过它的include of,它反过来指的是),而onxyz
不是onxyz
只是您自己的expando属性,据浏览器所知,它与事件没有任何连接
支持自定义事件,它们只是没有自己的特殊属性,因此您必须使用适当的事件注册方法(addEventListener
在现代系统中,attachEvent
在Internet Explorer的过时版本中):
window.addEventListener(“xyz”,()=>console.log(“这叫做!!”);
dispatchEvent(新事件(“xyz”))属性的前缀没有特殊意义-onclick
在某些方面是一个已定义的方法,比如HTML元素<代码>onxyz
只是一个属性名称-即,您的“心智模式”有缺陷。。。无论如何如果你说onclick=fna
那么onclick=fnb
。。。只有fnb
被调用。。。那么addEventListener
如何适合您的模型?因为您可以拥有任意数量的eventListener
s!