当我使用公共(public)方法(myPublicMethod)创建JS namespace (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文件中吗?
谢谢
最佳答案
该函数未在您的命名空间中定义的原因是由于以下几行
return
{
myPublicMethod:myPublicMethod
}
在返回之后插入一个隐含的分号,因此解释器看到的实际上是这样的:
return;
{
myPublicMethod:myPublicMethod
}
因此,实际上没有从该函数返回任何内容,并且
myNamespace
的值保留为undefined
。修复很容易:只需将左括号放在return
的同一行:return {
myPublicMethod: myPublicMethod
};
(请注意,结尾分号不是严格要求的,但如果您打算使用类似minifier的方法,则还是个好主意)
同样,您在第一个文件is invalid中定义函数的方式。它应该是
var myNamespace = (function() {
...
})();