当我使用公共(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() {
...
})();

07-24 09:51
查看更多