我从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作为处理程序,而不依赖于外部函数的参数?