将处理程序的对象存储在PubSub中?

时间:2019-09-26 11:33:25

标签: javascript oop design-patterns architecture dom-events

我从C#来到JS,所以我正在使用类语法/体系结构。

我的“处理程序”函数(我想存储在Pub / Sub对象中)使用封装了对象的参数(在构造函数中传递)。

但是它们被存储为未定义对象的匿名函数。

所以我想出了使PubSub的subscription方法成为对象的方法,然后 使用handler.call(Object, args)将对象绑定到处理程序。 这使我的对象可以响应某些事件而更改其参数。 在这种情况下使用观察者模式可能更好吗?

class EventBus
{
    constructor()    {
        this.subscribers = {};
    }

    subscribe(subName, object, handler)    {
        this.subscribers[subName].push({object: object, handler: handler});
    }

    publish(subName, eventArgs)    {
        const sub = this.subscribers[subName];
        sub[0].handler.call(sub[0].object, (eventArgs));
    }
}

我的渲染器对象,我想使用事件调用该函数:

class Renderer
{
    constructor(tileSize)
    {
        this.tileSize = tileSize;
    }

    render(tile)
    {
        ctx.fillText(this.getTileGraphics(tile), tile.x*tileSize, tile.y*tileSize);       
    }

    getTileGraphics(tile){...}
}

//这是我的html代码:

<script>
    const eventBus = new EventBus();
    var renderer = new Renderer(tileSize=32);     
    eventBus.subscribe("OnTileRender", renderer, renderer.render);
<script>

所以我的方法很好,我可以继续进行下去,还是最好使用Pub / Sub作为处理程序,而不依赖于外部函数的参数?

0 个答案:

没有答案