如何将函数从一个对象复制到另一个对象?

时间:2015-01-30 16:47:40

标签: javascript

我正在使用具有事件处理功能的本土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访问,即使它已被移动到另一个对象。

我不知所措。帮助将不胜感激。

0 个答案:

没有答案