当我使用公共方法(myPublicMethod)创建JS命名空间(myNamespace)时
jsfile1.js
var myNamespace=(function() {
var myPublicMethod=function(){
alert("hello world");
}
return
{
myPublicMethod:myPublicMethod
};
})();
然后有一个单独的.js文件,它封装了它的方法
jsfile2.js
(function(){
myNamespace.myPublicMethod();
})();
然后将这两个文件包含在html文件中
<script src="jsfile1.js"...>
<script src="jsfile2.js" ...>
当我尝试调用myPublicMethod()时,我收到myNamespace不存在的错误。这是因为它封装在jsfile2.js文件中吗?
由于
答案 0 :(得分:7)
在命名空间中未定义函数的原因是由于行
return
{
myPublicMethod:myPublicMethod
}
在返回后插入隐含的分号,因此解释器看到的实际上是这样的:
return;
{
myPublicMethod:myPublicMethod
}
因此该函数实际上没有返回任何内容,myNamespace
的值仍为undefined
。修复很简单:只需将左括号放在与return
:
return {
myPublicMethod: myPublicMethod
};
(请注意,后面的分号不是严格必需,但如果您打算使用minifier之类的东西,那么无论如何都是个好主意
此外,您在第一个文件is invalid中定义函数的方式。它应该是
var myNamespace = (function() {
...
})();
答案 1 :(得分:1)
将文件1更改为以下工作吗?
var myNamespace={
myPublicMethod: function(){
alert("hello world");
}
};
答案 2 :(得分:1)
你的myNamespace
函数声明中缺少括号,你也应该在return语句中使用分号:
var myNamespace = function () {
var myPublicMethod = function(){
alert("hello world");
}
return {
myPublicMethod : myPublicMethod
};
}();
myNamespace.myPublicMethod();