我正在使用具有事件处理功能的本土javascript库。它的核心是registerEvents函数:
core.registerEvents = function(evts, mod)
{
if (this.is_obj(evts) && mod)
{
if (moduleData[mod])
{
moduleData[mod].events = evts;
}
}
};
在此,mod
是一个模块,moduleData
是函数父作用域中的模块数组,evts
是具有命名函数的对象。使用类似于:
core.registerEvents({
"event1": function() {alert('event1');},
"event2": function() {alert('event2');}
},
myModule);
这一切都运作良好,但它要求所有事件一次注册,以后无法注册其他事件。
我想要扩展它,以便在调用registerEvents()时,如果没有注册事件,则接受传递的evts对象作为事件对象,但如果已经注册了事件,则添加函数在你的evts对象中你的事件对象。
这样的事情:
core.registerEvents = function(evts, mod)
{
if (this.is_obj(evts) && mod)
{
if (moduleData[mod])
{
if (moduleData[mod].events)
{
// move functions in evts to moduleData[mod].events
}
else
{
moduleData[mod].events = evts;
}
}
}
};
我还没有了解如何做到这一点。
一个复杂性:我们的新函数evts.event1是在特定的词法范围中定义的。当我们将函数移动到另一个对象时,我们不想更改该范围。 evts.event1定义后,父范围内的变量应该仍然可以被evts.event1访问,即使它已被移动到另一个对象。
我不知所措。帮助将不胜感激。