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

Can't access to my namespace in a function

本文关键字:命名空间 函数 访问      更新时间:2023-09-26

我正在做一个学校分配,我们必须做一个小应用程序,它通过遵循一种模式来管理一个怪物,但我的课程解释得很糟糕,所以我什么都不懂,我无法区分公共和私有,我知道 Java、Php 有什么区别,但不知道 js 有什么区别。

这就是它的作用,当我加载页面时,它会monster.modules.app中执行run(),这应该在 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);

实际上你不会像这样将每个函数都包装在括号中

myIIF = (function { ... });

如果您立即调用它们,您可以将它们放在括号中,这种类型的函数称为 I立即调用了 Functions 或 IIF:

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

通过以这种方式调用函数,您可以创建一个所谓的闭包,即函数中的函数来创建新作用域。

你可以在这里找到对闭包的简要解释