Bit*_*lue 2 javascript events javascript-events
如何在JavaScript中向我自己的类的对象添加事件侦听器和调度事件?
在ActionScript 3中,我可以简单地从Sprite/DisplayObject继承并使用那里可用的方法.像这样:
// ActionScript-3:
// I can add event listeners to all kinds of events
var mySprite: Sprite = new MySprite();
mySprite.addEventListener("my_menu_item_click", onMenuItemClick);
// later I can dispatch an event from one of my objects
mySprite.dispatchEvent(new Event("my_menu_item_click", ...));
Run Code Online (Sandbox Code Playgroud)
我希望在JavaScript中也一样.到现在为止我知道window.addEventListener(...)和document.addEventListener(...).到目前为止,我在JavaScript中有自己的Sprite类,我想用它来发送我自己的事件.
// JavaScipt:
function Sprite()
{
this.x = 0;
this.y = 0;
// ...
}
Run Code Online (Sandbox Code Playgroud)
由于这两种语言看起来与事件"相似",我想我需要继承某些类?或者我是否必须使用一些全局变量,如窗口和/或文档?
我在这里使用HTML5.我只有1个画布和一堆精灵被吸引到用户输入.我想要一个精灵A来订阅另一个精灵B的事件.但是不要给第三个精灵C.
我试图将方法添加到我的Sprite类中并成功.
当然还没有完成,但至少它是有效的.
这就是我在寻找的东西.
function Sprite()
{
// ...
this.eventListeners = new Array();
this.addEventListener = function(type, eventHandler)
{
var listener = new Object();
listener.type = type;
listener.eventHandler = eventHandler;
this.eventListeners.push(listener);
}
this.dispatchEvent = function(event)
{
for (var i = 0; i < this.eventListeners.length; i++)
if (event.type == this.eventListeners[i].type)
this.eventListeners[i].eventHandler(event);
}
}
Run Code Online (Sandbox Code Playgroud)