我希望通过将JavaScript代码拆分为不同的文件并给每个文件一个 "sub" 命名空间来使其更加模块化,如下所示。
subA.js
if(typeof ex == "undefined") {
var ex = {};
}
ex.subA = function() {
//all functions of subA here
}
同样适用于 subB 等。
目前我只有一个文件,ex.js
var ex = (function() {
//private vars/funcs
return {
//public vars/funcs
}
})();
看起来我应该将大部分函数移动到 subA.js 和 subB.js 中,但仍然在开头包含 ex.js,随后是 subA.js 和 subB.js。
我有几个问题。
我很难记住我如何制作最初的命名空间文件 ex.js。它看起来匿名函数最初是用来使一切都是私有的,但我不记得为什么需要将其括在括号中,并使用末尾的
();
直接执行。继续 q1,我的子文件是否应与 ex.js 具有相同的格式,即将匿名函数包装在括号中并立即执行?
看起来子文件只能访问
ex
的公共函数,这是真的吗?如果是这样,我如何允许我的子文件也访问私有函数?在我的 HTML 文件中,在我的 document.ready 函数(jQuery)中,我应该将 ex 初始化为一个变量,还是可以通过以下方式逐个调用每个函数
$(document).ready(function() { ex.doSomething(); ex.doSomethingElse(); }
两者之间有区别吗?我认为当 ex.js 被包含时,由于匿名函数被立即执行,全局变量 ex 将立即创建,因此我不需要在 document.ready 中重新定义它。
subA.js 中的第一个 if 语句与
var ex = ex || {};
有什么区别?哪个更好?您使用什么 JavaScript 代码风格标准?
如果你读完了这些,你已经值得一个赞了,干杯。
typeof
比较中添加引号,并删除!ex
:if(typeof ex == "undefined")
。 - Rob Wtypeof
将返回"undefined"
。然而,有些属性在进行检查时可能会返回null
(typeof null === "object"
)。 - Rob W