繁体   English   中英

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

[英]How to call a public function in a Javascript namesapce

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

谢谢

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

return
{
   myPublicMethod:myPublicMethod
}

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

return;
{
   myPublicMethod:myPublicMethod
}

因此,实际上没有从函数返回任何内容,并且myNamespace的值仍未undefined 修复很简单:只需将开口支撑放在与return相同的行上:

return { 
  myPublicMethod: myPublicMethod
};

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

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

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

将文件1更改为以下工作?

var myNamespace={

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

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

var myNamespace = function () {

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

  return {
     myPublicMethod : myPublicMethod
  };
}();

myNamespace.myPublicMethod();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM