【发布时间】:2011-12-02 19:45:13
【问题描述】:
我希望通过将我的 javascript 拆分为不同的文件并为每个文件提供一个像这样的“子”命名空间来使我的 javascript 更加模块化。
subA.js
if(typeof ex == "undefined") {
var ex = {};
}
ex.subA = function() {
//all functions of subA here
}
subB 等也一样
目前我有 1 个文件,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 的格式相同,即,将 anon 函数包裹在括号中并立即执行?
看起来子文件只能访问
ex的公共功能,这是真的吗?如果是,我怎样才能让我的子文件也访问私有函数?在我的 HTML 文件中,在我的 document.ready 函数 (jQuery) 中,我应该将 ex 初始化为一个变量,还是可以通过以下方式单独调用每个函数
$(document).ready(function() {
ex.doSomething();
ex.doSomethingElse();
}
这两者有区别吗?我认为当包含 ex.js 时,会立即创建一个全局变量 ex(由于立即执行匿名函数),所以我不需要在 document.ready 中重新定义它。
subA.js 中的第一个 if 语句与
var ex = ex || {};有什么不同吗?哪个更好?你使用什么 js 代码风格标准?
如果您通读了所有这些内容,那么您已经值得一票了,干杯。
【问题讨论】:
-
您最好在
typeof比较中添加引号,并删除!ex:if(typeof ex == "undefined")。 -
@Rob W 某些浏览器不是将 ex 返回为 null 而不是“未定义”吗? yahoo 名称间距代码使用 !ex
-
当一个变量以前从未定义过时,
typeof将返回"undefined"。但是,某些属性在执行检查时可能会返回null(typeof null === "object")。
标签: javascript jquery inheritance module namespaces