我希望通过将其分成不同的文件并为每个文件提供一个"sub"命名空间来使我的javascript更加模块化.
subA.js
if(typeof ex == "undefined") {
var ex = {};
}
ex.subA = function() {
//all functions of subA here
}
Run Code Online (Sandbox Code Playgroud)
对于subB等也一样
目前我有1个文件,ex.js
var ex = (function() {
//private vars/funcs
return {
//public vars/funcs
}
})();
Run Code Online (Sandbox Code Playgroud)
看起来我应该将大部分函数移动到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代码风格标准?
如果你仔细阅读了所有这些,你就应该得到一个赞成,欢呼.
如果我有类似的东西:
App = {
editingMode: function ()
{
function setEditingMode(entityID) {
$('#editingMode').val('1');
$.ajax({
type: "POST",
url: "/Organisations/Manage/LockEntity/",
data: "entityID=" + entityID
});
}
function setEditingModeOff(entityID) {
if ($("#myform").valid() == true)
{
$('#editingMode').val('0');
$.ajax({
type: "POST",
url: "/Organisations/Manage/UnlockEntity/",
data: "entityID=" + entityID
});
}
}
}
};
Run Code Online (Sandbox Code Playgroud)
我如何运行其中一个内部函数?
App.editingMode();但那我该怎么办呢setEditingMode?
在您自己的名称范围内编写JavaScript意味着什么,显然它避免了冲突并符合W3C标准,但我不知道它意味着什么或如何完成?