无法在函数中访问我的命名空间

时间:2016-02-03 10:55:44

标签: javascript design-patterns web

我正在做学校的分配,我们必须做一个小型的应用程序,按照一个模式管理一个怪物,但我的教训非常严重,所以我什么都不懂,我无法区分公共和私人,我知道Java,Php有什么不同,但不是js。

以下是它的作用,当我加载页面时,它在run()中执行monster.modules.app,这应该在monster.modules.actions中执行showMe(),问题是我得到了这个TypeError: monster.modules is undefined ..

那么你能解释一下为什么我不能在这个公共或私人功能中访问怪物吗?

为什么我必须将函数放入括号中?

(function (glob) {

    /**
     * Etape 1.1
     */
    // NAMESPACE : monster
    var monster = monster || {
            modules: {}
        };

    /**
     * Etape 1.2
     */
    monster.modules.actions = (function () {
        /**
         * Etape 1.2.1
         */
        var name;
        var life;
        var money;
        var awake;

        return {
            /**
             * Etape 1.2.2
             */
            showMe: function () {
                alert('Monster ' + this.name + ' : {life : ' + this.life + ', money : ' + this.money + ', awake : ' + this.awake + ' }');
            },

            /**
             * Etape 1.2.3
             */
            init: function (name, life, money, awake) {
                this.name = name;
                this.life = life;
                this.money = money;
                this.awake = awake;
            }
        };

    })();

    /**
     * Etape 1.3
     */
    monster.modules.app = (function () {
        /**
         * Etape 1.3.1
         */
        var show = document.getElementById('b6');

        return {
            /**
             * Etape 1.3.2
             */
            run: (function () {
                console.log('run');
                show.onclick = (function () {
                    monster.modules.actions.showMe();
                });

            })
        };
    })();

    /**
     * Etape 1.3.4
     */
    window.onload = (function () {
        monster.modules.app.run();
    });


})(window);

1 个答案:

答案 0 :(得分:1)

实际上你不会像这样把括号中的每个函数都包裹起来

myIIF = (function { ... });

如果你立即调用它们,你可以把它们放在括号中,这种类型的函数叫做立即 nvoked F unctions或IIF :

myIIF = (function { ... })();

通过以这种方式调用函数,您可以创建一个所谓的闭包,一个函数内的函数来创建一个新的范围。

您可以找到关闭here

的直接解释