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

时间:2009-08-28 22:19:06

标签: javascript

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

由于

3 个答案:

答案 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();