Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';无法在函数中访问我的命名空间_Javascript_Design Patterns_Web - Fatal编程技术网

Javascript Can';无法在函数中访问我的命名空间

Javascript Can';无法在函数中访问我的命名空间,javascript,design-patterns,web,Javascript,Design Patterns,Web,我正在做一个学校作业,我们必须做一个小应用程序,按照一个模式管理一个怪物,但我的课程解释得很糟糕,所以我什么都不懂,我无法区分公共和私人,我知道Java、Php和js有什么不同 下面是它所做的,当我加载页面时,它在monster.modules.app中执行run(),这应该在monster.modules.actions中执行showMe(),问题是我得到了这个类型错误:monster.modules未定义 你能解释一下为什么我不能在这个公共或私人功能中访问monster吗 为什么我要把函数放

我正在做一个学校作业,我们必须做一个小应用程序,按照一个模式管理一个怪物,但我的课程解释得很糟糕,所以我什么都不懂,我无法区分公共和私人,我知道Java、Php和js有什么不同

下面是它所做的,当我加载页面时,它在
monster.modules.app
中执行
run()
,这应该在monster.modules.actions中执行
showMe()
,问题是我得到了这个
类型错误:monster.modules未定义

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

为什么我要把函数放在括号里

(功能(全局){
/**
*电子表格1.1
*/
//名称空间:monster
var monster=怪物| |{
模块:{}
};
/**
*电子表格1.2
*/
monster.modules.actions=(函数(){
/**
*第1.2.1节
*/
变量名;
var寿命;
var货币;
var清醒;
返回{
/**
*第1.2.2节
*/
showMe:function(){
警报('Monster'+this.name+':{life:'+this.life+',money:'+this.money+',awake:'+this.awake+');
},
/**
*第1.2.3节
*/
init:函数(名称、生命、金钱、唤醒){
this.name=名称;
这就是生活;
这个。钱=钱;
这是醒着的;
}
};
})();
/**
*电子表格1.3
*/
monster.modules.app=(函数(){
/**
*第1.3.1节
*/
var show=document.getElementById('b6');
返回{
/**
*第1.3.2节
*/
运行:(函数(){
console.log('run');
show.onclick=(函数(){
monster.modules.actions.showMe();
});
})
};
})();
/**
*第1.3.4节
*/
window.onload=(函数(){
monster.modules.app.run();
});

})(窗口)实际上,并不是每个函数都像这样用括号括起来

myIIF = (function { ... });
如果您立即调用它们,可以将它们放在括号中,这种类型的函数称为I立即InvokedF函数或IIF:

myIIF = (function { ... })();
通过以这种方式调用函数,您可以创建一个所谓的闭包,即在函数中创建一个新作用域的函数


您可以找到一个关于闭包的简明解释

实际上,您的代码运行良好。代码片段来自哪里?是你写的吗?回答最后一个问题:据我所知,函数不需要用括号括起来。我的课解释得很糟糕,所以我什么都不懂。所以,决不是你的错,是吗?JS中没有“public”和“private”,只有变量(具有范围)和属性(属于对象)。你可能想看一看@C.champone我是通过以下课程的例子写的谢谢,我不明白:)这是一个细节,但IIF不需要括号:你可以直接编写
myIIF=function{…}()