如何在Javascript namesapce中调用公共函数

Chr*_*isP 3 javascript

当我使用公共方法(myPublicMethod)创建JS命名空间(myNamespace)时

jsfile1.js

var myNamespace=(function() {

  var myPublicMethod=function(){
    alert("hello world");
  }

  return
  {
     myPublicMethod:myPublicMethod
  };

})();
Run Code Online (Sandbox Code Playgroud)

然后有一个单独的.js文件封装其方法

jsfile2.js

(function(){
  myNamespace.myPublicMethod();
})();
Run Code Online (Sandbox Code Playgroud)

然后将这两个文件包含在html文件中

<script src="jsfile1.js"...>
<script src="jsfile2.js" ...>
Run Code Online (Sandbox Code Playgroud)

当我尝试调用myPublicMethod()时,我收到myNamespace不存在的错误.这是因为它封装在jsfile2.js文件中吗?

谢谢

jim*_*imr 7

未在命名空间中定义函数的原因是由于行

return
{
   myPublicMethod:myPublicMethod
}
Run Code Online (Sandbox Code Playgroud)

返回后插入一个隐含的分号,所以解释器看到的实际上是这样的:

return;
{
   myPublicMethod:myPublicMethod
}
Run Code Online (Sandbox Code Playgroud)

因此,函数实际上没有返回任何内容,而myNamespace遗留的值也是如此undefined.修复很简单:只需将开口支架放在与以下相同的线上return:

return { 
  myPublicMethod: myPublicMethod
};
Run Code Online (Sandbox Code Playgroud)

(请注意,并非严格要求使用尾随分号,但如果您打算使用像minifier这样的东西,那么无论如何都是个好主意)

此外,您在第一个文件中定义函数的方式无效.它应该是

var myNamespace = (function() {
...
})();
Run Code Online (Sandbox Code Playgroud)