如何在Javascript名称空间中调用公共函数

如何在Javascript名称空间中调用公共函数,javascript,Javascript,当我使用公共方法(myPublicMethod)创建JS命名空间(myNamespace)时 jsfile1.js var myNamespace=(function() { var myPublicMethod=function(){ alert("hello world"); } return { myPublicMethod:myPublicMethod }; })(); 然后有一个单独的.js文件来封装它的方法 jsfile2.js (fun

当我使用公共方法(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文件中吗


谢谢

将文件1更改为以下工作好吗

var myNamespace={

  myPublicMethod: function(){
    alert("hello world");
  }
};

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

return
{
   myPublicMethod:myPublicMethod
}
在返回后插入一个隐含的分号,因此解释器看到的实际上类似于:

return;
{
   myPublicMethod:myPublicMethod
}
因此,函数实际上没有返回任何内容,
myNamespace
的值保持
未定义。解决方法很简单:只需将开口大括号与返回的
放在同一行即可:

return { 
  myPublicMethod: myPublicMethod
};
(请注意,后面的分号不是严格要求的,但是如果您计划使用类似于a的东西,那么无论如何都是一个好主意)

还有,在第一个文件中定义函数的方式。应该是

var myNamespace = (function() {
...
})();

myNamespace
函数声明中缺少括号,您还应该在return语句中使用分号:

var myNamespace = function () {

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

  return {
     myPublicMethod : myPublicMethod
  };
}();

myNamespace.myPublicMethod();

根据您的示例进行了修改,上面进行了更改,但仍然得到相同的错误。将{移动到返回的同一行是有效的。有趣的是,您必须将大括号与“返回”放在同一行上.似乎与语言的其他方面不一致。谢谢。你错过了最关键的变化…我修改了jimr的答案,明确指出了这一点。