如何在Javascript名称空间中调用公共函数
当我使用公共方法(myPublicMethod)创建JS命名空间(myNamespace)时 jsfile1.js如何在Javascript名称空间中调用公共函数,javascript,Javascript,当我使用公共方法(myPublicMethod)创建JS命名空间(myNamespace)时 jsfile1.js var myNamespace=(function() { var myPublicMethod=function(){ alert("hello world"); } return { myPublicMethod:myPublicMethod }; })(); 然后有一个单独的.js文件来封装它的方法 jsfile2.js (fun
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的答案,明确指出了这一点。