Javascript 如何从命名空间内的函数调用div的onmouseover事件?

Javascript 如何从命名空间内的函数调用div的onmouseover事件?,javascript,Javascript,我有以下javascript代码: var FOO = FOO || {}; FOO.Main = (function() { function init() { // do some not relevant stuff } // User interaction function mouseOver() { console.log("OVER"); } function mouseOut() {

我有以下javascript代码:

var FOO = FOO || {};

FOO.Main = (function() {

    function init() {
             // do some not relevant stuff
    }

    // User interaction
    function mouseOver() {
        console.log("OVER");
    }

    function mouseOut() {
        console.log("OUT");
    }

    init();
})();
在html上显示以下内容:

<div id="logo-container" onmouseover="NARDOVE.mouseOver();" onmouseout="NARDOVE.Main.mouseOut();">
        <div id="layer-1">
            <canvas id="logo-canvas"></canvas>
            <script type="text/javascript" src="js/labs-logo.js"></script>
    </div>
</div>

但我得到以下错误:

  • 未捕获的TypeError:对象#没有方法“mouseOver”(索引):23
  • 未捕获的TypeError:无法调用未定义的方法“mouseOut”

我知道我调用方法的方式不同,但这只是我在测试,有什么想法吗?如何使用div内联调用调用鼠标方法?

问题在于定义名称空间的方式。将匿名函数调用的结果分配给FOO.Main,但匿名函数不返回任何内容

您可以通过返回包含要通过FOO.Main公开的方法和属性的对象来修复此问题:

var FOO = FOO || {};

FOO.Main = (function() {
    function init() {
             // do some not relevant stuff
    }

    // User interaction
    function mouseOver() {
        console.log("OVER");
    }

    function mouseOut() {
        console.log("OUT");
    }

    init();

    return {
        "mouseOver": mouseOver,            
        "mouseOut": mouseOut
    };
})();
然后,您可以像这样调用mouseOver/mouseOut函数:

FOO.Main.mouseOver();
FOO.Main.mouseOut();

这些函数是闭包的局部函数,您必须返回一个对象。阅读“模块模式”,我认为这是你需要的。谢谢它的工作!现在我想问一下,这种做法是否普遍?我只是想在学习过程中采用最佳实践curve@RicardoSanchez是的,它是定义名称空间的一种非常常见的方法,尽管不是唯一的方法。你正在做的就是所谓的模块设计模式,如果你想阅读更多关于模块的内容,我建议你阅读。