用JavaScript编写自定义事件调度程序?

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.

Bit*_*lue 5

我试图将方法添加到我的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)