当我使用公共方法(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文件中吗?
谢谢
未在命名空间中定义函数的原因是由于行
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)
| 归档时间: |
|
| 查看次数: |
6109 次 |
| 最近记录: |